Cómo utilizar SFTP para transferir archivos de forma segura a un servidor remoto

Introducción

Índice
  1. Introducción
  • Cómo conectarse con SFTP
  • Obtención de ayuda en SFTP
  • Navegando con SFTP
  • Transferencia de archivos con SFTP
    1. Transferencia de archivos locales al sistema remoto
  • Manipulaciones sencillas de archivos con SFTP
  • Conclusión
  • FTP, el Protocolo de transferencia de archivos , era un método popular y sin cifrar para transferir archivos entre dos sistemas remotos. A partir de 2022, la mayoría del software moderno lo ha dejado en desuso debido a la falta de seguridad y, en su mayoría, solo se puede utilizar en aplicaciones antiguas.

    SFTP, que significa Protocolo de transferencia segura de archivos, es un protocolo independiente integrado en SSH que puede implementar comandos FTP a través de una conexión segura. Por lo general, puede actuar como un reemplazo directo en cualquier contexto en el que aún se necesite un servidor FTP.

    En casi todos los casos, SFTP es preferible a FTP debido a sus características de seguridad subyacentes y la capacidad de conectarse a una conexión SSH. FTP es un protocolo inseguro que solo se debe utilizar en casos limitados o en redes en las que confíe.

    Aunque SFTP está integrado en muchas herramientas gráficas, esta guía demostrará cómo usarlo a través de su interfaz de línea de comandos interactiva.

    Cómo conectarse con SFTP

    De forma predeterminada, SFTP utiliza el protocolo SSH para autenticar y establecer una conexión segura. Por este motivo, están disponibles los mismos métodos de autenticación que están presentes en SSH.

    Aunque puede autenticarse con contraseñas de forma predeterminada, le recomendamos que cree claves SSH y transfiera su clave pública a cualquier sistema al que necesite acceder. Esto es mucho más seguro y puede ahorrarle tiempo a largo plazo.

    Consulte esta guía para configurar claves SSH para acceder a su servidor si aún no lo ha hecho.

    Si puede conectarse a la máquina mediante SSH, habrá cumplido con todos los requisitos necesarios para utilizar SFTP para administrar archivos. Pruebe el acceso SSH con el siguiente comando:

    1. ssh sammy@your_server_ip_or_remote_hostname

    Si eso funciona, salga nuevamente escribiendo:

    1. exit

    Ahora podemos establecer una sesión SFTP emitiendo el siguiente comando:

    1. sftp sammy@your_server_ip_or_remote_hostname

    Se conectará al sistema remoto y su mensaje cambiará a un mensaje SFTP.

    Si está trabajando en un puerto SSH personalizado (no el puerto predeterminado 22), puede abrir una sesión SFTP de la siguiente manera:

    1. sftp -oPort=custom_port sammy@your_server_ip_or_remote_hostname

    Esto lo conectará al sistema remoto a través del puerto especificado.

    Obtención de ayuda en SFTP

    El comando más útil que conviene aprender primero es el comando de ayuda. Este le permite acceder a un resumen de los demás comandos SFTP. Puede llamarlo escribiendo cualquiera de estos en el mensaje de solicitud:

    1. help

    o

    1. ?

    Esto mostrará una lista de los comandos disponibles:

    OutputAvailable commands:bye                                Quit sftpcd path                            Change remote directory to 'path'chgrp grp path                     Change group of file 'path' to 'grp'chmod mode path                    Change permissions of file 'path' to 'mode'chown own path                     Change owner of file 'path' to 'own'df [-hi] [path]                    Display statistics for current directory or                                   filesystem containing 'path'exit                               Quit sftpget [-Ppr] remote [local]          Download filehelp                               Display this help textlcd path                           Change local directory to 'path'. . .

    Exploraremos algunos de los comandos que verá en las siguientes secciones.

    Navegando con SFTP

    Podemos navegar a través de la jerarquía de archivos del sistema remoto utilizando una serie de comandos que funcionan de manera similar a sus contrapartes de shell.

    En primer lugar, orientémonos para averiguar en qué directorio nos encontramos actualmente en el sistema remoto. Al igual que en una sesión de shell típica, podemos escribir lo siguiente para obtener el directorio actual:

    1. pwd
    OutputRemote working directory: /home/demouser

    Podemos ver el contenido del directorio actual del sistema remoto con otro comando familiar:

    1. ls
    OutputSummary.txt     info.html       temp.txt        testDirectory

    Tenga en cuenta que los comandos disponibles en la interfaz SFTP no son exactamente iguales a la sintaxis típica del shell y no tienen tantas funciones. Sin embargo, sí implementan algunas de las opciones más importantes, como agregar -lapara lsver más metadatos y permisos de archivos:

    1. ls -la
    Outputdrwxr-xr-x    5 demouser   demouser       4096 Aug 13 15:11 .drwxr-xr-x    3 root     root         4096 Aug 13 15:02 ..-rw-------    1 demouser   demouser          5 Aug 13 15:04 .bash_history-rw-r--r--    1 demouser   demouser        220 Aug 13 15:02 .bash_logout-rw-r--r--    1 demouser   demouser       3486 Aug 13 15:02 .bashrcdrwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile. . .

    Para llegar a otro directorio, podemos emitir este comando:

    1. cd testDirectory

    Ahora podemos recorrer el sistema de archivos remoto, pero ¿qué sucede si necesitamos acceder a nuestro sistema de archivos local? Podemos dirigir comandos hacia el sistema de archivos local precediéndolos con un lfor local.

    Todos los comandos que hemos analizado hasta ahora tienen equivalentes locales. Podemos imprimir el directorio de trabajo local:

    1. lpwd
    OutputLocal working directory: /Users/demouser

    Podemos enumerar el contenido del directorio actual en la máquina local:

    1. lls
    OutputDesktoplocal.txttest.htmlDocumentsanalysis.rtfzebra.html

    También podemos cambiar el directorio con el que queremos interactuar en el sistema local:

    1. lcd Desktop

    Transferencia de archivos con SFTP

    Si queremos descargar archivos desde nuestro host remoto, podemos hacerlo usando el getcomando:

    1. get remoteFile
    OutputFetching /home/demouser/remoteFile to remoteFile/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

    Como puede ver, de forma predeterminada, el getcomando descarga un archivo remoto a un archivo con el mismo nombre en el sistema de archivos local.

    Podemos copiar el archivo remoto a un nombre diferente especificando el nombre después:

    1. get remoteFile localFile

    El getcomando también acepta algunas opciones. Por ejemplo, podemos copiar un directorio y todo su contenido especificando la opción recursiva:

    1. get -r someDirectory

    Podemos indicarle a SFTP que mantenga los permisos y tiempos de acceso adecuados mediante el indicador -Po -p:

    1. get -Pr someDirectory

    Transferencia de archivos locales al sistema remoto

    La transferencia de archivos al sistema remoto funciona de la misma manera, pero con un putcomando:

    1. put localFile
    OutputUploading localFile to /home/demouser/localFilelocalFile                                     100% 7607     7.4KB/s   00:00

    Las mismas banderas que funcionan con getse aplican a put. Por lo tanto, para copiar un directorio local completo, puede ejecutar put -r:

    1. put -r localDirectory

    Una herramienta conocida y útil para descargar y cargar archivos es el dfcomando, que funciona de manera similar a la versión de línea de comandos. Con él, puede comprobar que tiene suficiente espacio para completar las transferencias que le interesan:

    1. df -h
    Output    Size     Used    Avail   (root)    %Capacity  19.9GB   1016MB   17.9GB   18.9GB           4%

    Tenga en cuenta que no existe una variación local de este comando, pero podemos evitarlo emitiendo el !comando.

    El !comando nos lleva a un shell local, donde podemos ejecutar cualquier comando disponible en nuestro sistema local. Podemos comprobar el uso del disco escribiendo:

    1. !

    y luego

    1. df -h
    OutputFilesystem      Size   Used  Avail Capacity  Mounted on/dev/disk0s2   595Gi   52Gi  544Gi     9%    /devfs          181Ki  181Ki    0Bi   100%    /devmap -hosts       0Bi    0Bi    0Bi   100%    /netmap auto_home    0Bi    0Bi    0Bi   100%    /home

    Cualquier otro comando local funcionará como se espera. Para volver a la sesión SFTP, escriba:

    1. exit

    Ahora deberías ver el retorno del mensaje SFTP.

    Manipulaciones sencillas de archivos con SFTP

    SFTP le permite realizar algunos tipos de mantenimiento del sistema de archivos. Por ejemplo, puede cambiar el propietario de un archivo en el sistema remoto con:

    1. chown userID file

    Observe cómo, a diferencia del chmodcomando del sistema, el comando SFTP no acepta nombres de usuario, sino que utiliza identificadores de usuario (UID). Lamentablemente, no existe una forma integrada de saber el UID apropiado desde la interfaz SFTP.

    Como solución alternativa, puede leer el /etc/passwdarchivo que asocia los nombres de usuario con los UID en la mayoría de los entornos Linux:

    1. get /etc/passwd
    2. !less passwd
    Outputroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/bin/shman:x:6:12:man:/var/cache/man:/bin/sh. . .

    Observe cómo, en lugar de proporcionar el !comando por sí solo, lo hemos utilizado como prefijo para un comando de shell local. Esto sirve para ejecutar cualquier comando disponible en nuestra máquina local y podría haberse utilizado con el dfcomando local anteriormente.

    El UID estará en la tercera columna del archivo, como lo delinean los caracteres de dos puntos.

    De manera similar, podemos cambiar el propietario del grupo de un archivo con:

    1. chgrp groupID file

    Nuevamente, no existe una forma integrada de obtener una lista de los grupos del sistema remoto. Podemos solucionarlo con el siguiente comando:

    1. get /etc/group
    2. !less group
    Outputroot:x:0:daemon:x:1:bin:x:2:sys:x:3:adm:x:4:tty:x:5:disk:x:6:lp:x:7:. . .

    La tercera columna contiene el ID del grupo asociado con el nombre de la primera columna. Esto es lo que estamos buscando.

    El chmodcomando SFTP funciona normalmente en el sistema de archivos remoto:

    1. chmod 777 publicFile
    OutputChanging mode on /home/demouser/publicFile

    No existe un comando equivalente para manipular los permisos de archivos locales, pero puede configurar la umask local , de modo que cualquier archivo copiado al sistema local tenga sus permisos correspondientes.

    Esto se puede hacer con el lumaskcomando:

    1. lumask 022
    OutputLocal umask: 022

    Ahora todos los archivos normales descargados (siempre que -pno se use la bandera) tendrán permisos 644.

    SFTP también le permite crear directorios en sistemas locales y remotos con lmkdiry mkdirrespectivamente.

    El resto de los comandos de archivo apuntan únicamente al sistema de archivos remoto:

    1. ln
    2. rm
    3. rmdir

    Estos comandos replican el comportamiento básico de sus equivalentes de shell. Si necesita realizar estas acciones en el sistema de archivos local, recuerde que puede ingresar a un shell ejecutando este comando:

    1. !

    O bien, ejecute un solo comando en el sistema local anteponiendo el comando con algo !como esto:

    1. !chmod 644 somefile

    Cuando haya terminado su sesión SFTP, utilice exito byepara cerrar la conexión.

    1. bye

    Conclusión

    Aunque la sintaxis SFTP es mucho menos completa que las herramientas de shell modernas, puede ser útil para brindar compatibilidad con la sintaxis FTP heredada o para limitar cuidadosamente la funcionalidad disponible para los usuarios remotos de algunos entornos.

    Por ejemplo, puede utilizar SFTP para permitir que determinados usuarios transfieran archivos sin acceso SSH. Para obtener más información sobre este proceso, consulte nuestro tutorial sobre Cómo habilitar SFTP sin acceso a shell .

    Si está acostumbrado a utilizar FTP o SCP para realizar sus transferencias, SFTP es una buena forma de aprovechar las ventajas de ambos. Si bien no es adecuado para todas las situaciones, es una herramienta flexible que puede tener en su repertorio.

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion