Este tutorial explica cómo conectar y transferir archivos a través del protocolo sftp en Linux, así como protegerlos mediante la implementación de medidas de seguridad.
El comando sftp es una de las herramientas más útiles para todos los usuarios de la red, incluidos los usuarios domésticos. Este comando también se puede implementar en sistemas Windows, lo que lo hace atractivo para todo tipo de red.
Esta es una de las principales herramientas de línea de comandos para compartir archivos de forma segura entre computadoras. Además, para descargar y cargar archivos y directorios, el usuario puede cambiar de forma remota los permisos, eliminar y cambiar el nombre de los archivos y más.
SFTP es un comando que definitivamente mejorará la experiencia de red desde la línea de comandos.
Después de leer este artículo y aplicar ejemplos (también se pueden reproducir en una máquina virtual), el lector sabrá cómo configurar sistemas Linux para transferir archivos con el comando sftp, tanto en modo interactivo como en línea de comandos.
El contenido es válido para todas las distribuciones de Linux e incluye capturas de pantalla de escenarios reales, lo que facilita a todos los lectores comprender cómo se aplican los comandos independientemente del nivel de conocimiento previo.
Breve introducción a sftp
Anteriormente, FTP (Protocolo de transferencia de archivos) era el único método para transferir archivos entre clientes y servidores o entre dos dispositivos de red.
Los usuarios solían cargar todos los archivos de descarga desde servidores FTP con permisos para leer y escribir en los directorios permitidos.
Pero el protocolo FTP sufrió vulnerabilidades de alto riesgo y fue reemplazado por protocolos más nuevos y seguros. Dos ejemplos ampliamente conocidos son SCP (Protocolo de copia segura) y SFTP (Protocolo de transferencia segura de archivos). SFTP es uno de los reemplazos más populares para el protocolo FTP.
Al igual que FTP, SFTP se puede utilizar a través de un modo de texto interactivo o mediante la ejecución de comandos individuales. Este tutorial explica ambas técnicas.
Requisitos previos para usar sftp
El protocolo sftp requiere que ssh (Secure Shell) esté instalado y ejecutándose en el servidor desde el que desea descargar o cargar archivos.
Si su servidor ya tiene ssh ejecutándose, puede pasar a la siguiente sección de sftp .
En las distribuciones de Linux basadas en Debian, ssh se puede instalar usando el administrador de paquetes apt como se muestra en la captura de pantalla a continuación.
En las distribuciones de Linux basadas en RedHat, ssh se puede instalar ejecutando el siguiente comando:
Una vez instalado, en el servidor al que desea conectarse, inicie el servicio con el comando systemctl como se muestra a continuación (distribuciones basadas en Debian).
Para iniciar el servicio ssh en distribuciones basadas en RedHat, ejecute:
Cómo usar sftp en modo interactivo
Esta sección cubre el uso del modo interactivo sftp .
El único comando que debe ejecutarse para acceder al servidor sftp antes de obtener el símbolo del sistema sftp es la solicitud de conexión, que tiene una sintaxis similar a ssh y scp.
El siguiente ejemplo describe la sintaxis correcta, donde < Usuario > debe reemplazarse con un usuario existente en el servidor y <ServidorIP > con el host del servidor o la dirección IP.
En la siguiente captura de pantalla, el usuario local linux-hint3 se conecta como usuario remoto linuxhint al servidor con la dirección IP 192.168.0.103.
La primera vez que el usuario se conecte al servidor, se le solicitará que confirme la conexión. El usuario debe teclear “ sí ”, pulsar ENTER y rellenar la contraseña.
Una vez que el usuario se conecta, el servidor devolverá un símbolo del sistema sftp> donde el usuario puede ejecutar los comandos sftp .
El modo interactivo sftp permite a los usuarios interactuar con los sistemas locales y remotos.
Los comandos normales de Linux impactan en el servidor. Los comandos que comienzan con una » l » se ejecutan en el sistema local.
Por ejemplo, si el usuario ejecuta el comando pwd , mostrará el directorio de trabajo actual remoto. Pero si el usuario ejecuta lpwd , mostrará el directorio actual local.
De forma predeterminada, el directorio remoto local es el directorio de inicio del usuario remoto, excepto en algunos casos como el siguiente ejemplo, en los que el usuario remoto no tiene un directorio de inicio.
En la captura de pantalla a continuación, se ejecuta el comando pwd para mostrar el directorio de trabajo actual remoto.
Luego, se ejecuta lpwd para mostrar el directorio de trabajo local actual.
Como puede ver en la captura de pantalla anterior, el directorio de trabajo actual remoto es el directorio raíz (porque el usuario remoto de linuxhint4 no tiene un directorio de inicio) y el directorio de trabajo local es el directorio de inicio local.
Si el usuario ejecuta el comando ls (Lista), mostrará archivos y directorios remotos dentro del directorio de trabajo actual.
Al ejecutar lls (Lista local), el comando mostrará archivos y directorios dentro del directorio de trabajo local actual.
>Con el comando cd (Change Directory), el usuario puede moverse entre directorios remotos. Con el comando lcd (Locally Change Directory), el usuario puede moverse entre directorios locales, como se muestra en la siguiente figura.
>La sintaxis para descargar un archivo del servidor es la siguiente:
O
En el siguiente ejemplo, el usuario descarga el archivo llamado file10 y luego ejecuta lls (Lista local) para confirmar que el archivo se descargó correctamente.
>Para descargar directorios, la sintaxis es casi la misma excepto por el indicador -r como se muestra a continuación.
O
En el siguiente ejemplo, el usuario descarga un directorio llamado Directory1 .
>Para subir archivos, la sintaxis es la siguiente:
En el ejemplo práctico a continuación, el usuario carga un archivo llamado < archivo >
>Para cargar directorios, simplemente agregue el indicador -r .
O
Los usuarios también pueden eliminar archivos de forma remota utilizando los mismos comandos de Linux. Por ejemplo, para eliminar un archivo simplemente ejecute:
Para eliminar directorios, agregue el indicador -r como se muestra a continuación.
El comando df -h se puede utilizar para mostrar el espacio total del servidor, el espacio utilizado y el disponible.
Los usuarios también pueden cambiar los permisos de archivos y directorios con el comando chmod como se muestra en el siguiente ejemplo.
>Para salir del modo interactivo, ejecute exit .
>Otra forma de salir de la sesión de sftp es el comando bye .
>Uso de sftp con comandos individuales
Además, para el modo interactivo, sftp se puede usar con comandos individuales. Esta sección cubre cómo descargar y cargar archivos sin conexión previa al modo interactivo.
La sintaxis para descargar archivos es la siguiente:
En el siguiente ejemplo, el usuario inicia sesión como usuario de linuxhint5 y descarga el archivo remoto targets.txt en el directorio local representado por un punto.
>En el ejemplo práctico a continuación, el usuario descarga el archivo llamado something2.txt ubicado en el subdirectorio testdir/ remoto al subdirectorio Desktop/ local .
>Como se muestra en el siguiente ejemplo, al agregar el indicador -r , el usuario puede descargar directorios de forma recursiva. En el siguiente ejemplo, el usuario descarga el directorio testdir / en el escritorio / directorio local .
Para cargar archivos ejecutando un solo comando con sftp, aplique la siguiente sintaxis.
En el siguiente ejemplo, el Archivo2 local se carga en el directorio testdir/ .
Para cargar un directorio, agregue la opción -r usando la siguiente sintaxis
En el siguiente ejemplo, el directorio Desktop/ local se carga en el directorio perl5/ remoto .
Aumento de la seguridad de sftp con autenticación de claves
De forma predeterminada, las conexiones sftp son seguras y están protegidas por el protocolo ssh.
Pero uno de los riesgos es el método de inicio de sesión con contraseña predeterminado como consecuencia de la debilidad de la contraseña, que incluye el intercambio de contraseñas o los canales y procesos para compartir contraseñas. En el cual, las contraseñas pueden filtrarse, por ejemplo, con un ataque MiM (Man In the MIddle) seguido de una descripción exitosa.
Si el servidor no está configurado correctamente, el inicio de sesión con contraseña puede exponer el sistema a ataques de fuerza bruta.
Para evitar esto, una buena práctica para redes pequeñas y medianas es implementar la autenticación de clave ssh y deshabilitar el inicio de sesión con contraseña.
Implementación de autenticación de clave ssh y deshabilitación de inicio de sesión con contraseña
La seguridad sftp es otorgada por el protocolo ssh, cuyo archivo de configuración es /etc/ssh/sshd_config , el archivo que los usuarios deben editar para habilitar la autenticación con clave y deshabilitar el inicio de sesión con contraseña entre más opciones para reforzar la seguridad.
En el servidor que permite las conexiones entrantes, edite el archivo /etc/ssh/sshd_config con privilegios utilizando un editor de texto sin formato como nano o vi .
Para habilitar la autenticación de clave, en la computadora del servidor, abra el archivo /etc/ssh/sshd_config con privilegios y busque la línea que contiene PubkeyAuthentication no . Reemplácelo con PubkeyAuthentication sí (Reemplace el » no » con » sí «).
Confirme también PermitRootLogin no para deshabilitar el inicio de sesión raíz.
El usuario raíz está presente en todos los sistemas basados en Unix, incluido Linux. Es una mala decisión permitir el inicio de sesión con un nombre de usuario con privilegios conocidos por todos.
>No edite las opciones para deshabilitar el inicio de sesión con contraseña todavía, porque el proceso de uso compartido de claves requiere autenticación de contraseña antes de que el sistema pueda autenticarse con claves.
Salga del archivo de configuración guardando los cambios y reinicie el servicio ssh.
Distribuciones Linux basadas en Debian:
Distribuciones de Linux basadas en RedHat:
En el lado del cliente, al solicitar conexiones salientes, genere el par de claves ejecutando el comando ssh-keygen .
El proceso solicitará la confirmación del directorio clave, presione ENTER para dejar el directorio local predeterminado (~/.ssh/id_rsa) o el equivalente en su distribución de Linux. El proceso ofrecerá incluir una frase de contraseña que se requerirá al iniciar sesión. Al agregar una frase de contraseña, se puede aumentar la seguridad. Se recomienda teclear uno y pulsar ENTER . Si no desea agregar una frase de contraseña, simplemente presione ENTER sin escribirla.
Ahora, el cliente debe compartir la clave con el servidor con el comando ssh-copy-id usando la sintaxis del siguiente ejemplo.
Después de compartir la clave, pruebe el método de autenticación de la clave conectándose al servidor.
Si la autenticación tiene éxito, el usuario iniciará sesión sin contraseña. Si el usuario define una frase de contraseña, se solicitará en lugar de la contraseña como en el ejemplo a continuación.
Después de comprobar que la clave de autenticación funciona, se recomienda encarecidamente desactivar el inicio de sesión con contraseña.
En el lado del servidor , edite el archivo /etc/ssh/sshd/config nuevamente con un editor de texto como nano o vi .
Desplácese hacia abajo y reemplace la línea PasswordAuthentication yes con PasswordAuthentication no .
Reinicie el servicio ssh.
Distribuciones de Linux basadas en RedHat:
Ahora, la seguridad de autenticación se incrementa adecuadamente.
Conclusión
Sftp es una herramienta muy útil para compartir archivos entre dispositivos y ofrece dos modos simples. El protocolo sftp se puede instalar en todos los sistemas operativos, ofreciendo seguridad, confiabilidad y velocidad. Alternativamente, el comando SCP también ofrece confiabilidad, velocidad y seguridad y funciona a través del protocolo ssh. Este segundo comando también se explicó en profundidad en Linux Hint (el enlace se proporcionó en la introducción de este documento).