Utilizar SFTP para Transferir Archivos de Forma Segura con un Servidor Remoto

Actualizado el . Posteado en Blog. Visitado 12000 veces.

                                  Utilizar SFTP para Transferir Archivos de Forma Segura con un Servidor Remoto

¿Qué es SFTP?

FTP o "File Transfer Protocol" es un método popular de transferencia de archivos entre dos sistemas remotos.

SFTP, que significa protocolo de transferencia de archivos SSH o protocolo de transferencia segura de archivos, es un protocolo separado empaquetado con SSH que funciona de manera similar a través de una conexión segura. La ventaja es la capacidad de aprovechar una conexión segura para transferir archivos y recorrer el sistema de archivos tanto en el sistema local como remoto.

En casi todos los casos, SFTP es preferible a FTP debido a sus características de seguridad subyacentes y la capacidad de piggy-back en una conexión SSH. FTP es un protocolo inseguro que sólo debe utilizarse en casos limitados o en redes de confianza.

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.

Conectarse con SFTP

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

Aunque las contraseñas son fáciles de usar y configurar 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 le puede ahorrar tiempo en el largo plazo.

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

Si puede conectarse a la computadora mediante SSH, ha completado todos los requisitos necesarios para utilizar SFTP para administrar archivos. Pruebe el acceso SSH con el siguiente comando:

ssh username@remote_hostname_or_IP

Si funciona, vuelva a salir escribiendo:

exit

Podemos establecer una conexión SSH y luego abrir una sesión SFTP usando esa conexión emitiendo el siguiente comando:

sftp username@remote_hostname_or_IP

Conectará el sistema remoto y su mensaje cambiará a un mensaje de SFTP.

Obtención de Help en SFTP

El comando más útil para aprender primero es el comando help. Esto le da acceso a un resumen de la ayuda de SFTP. Puede llamarlo escribiendo cualquiera de estos en el indicador:

help
?

Esto mostrará una lista de los comandos disponibles:

Available commands:
bye                                Quit sftp
cd 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 sftp
get [-Ppr] remote [local]          Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
. . .

Exploraremos algunos de los comandos que se ven en las siguientes secciones.

Navegación con SFTP

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

En primer lugar, nos orientaremos averiguando en qué directorio estamos 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:

pwd
Remote working directory: /home/demouser

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

ls
Summary.txt     info.html       temp.txt        testDirectory

Tenga en cuenta que los comandos dentro de la interfaz SFTP no son los comandos de shell normales y no son tan ricos en características, pero implementan algunos de los indicadores opcionales más importantes:

ls -la
drwxr-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 .bashrc
drwx------    2 demouser   demouser       4096 Aug 13 15:04 .cache
-rw-r--r--    1 demouser   demouser        675 Aug 13 15:02 .profile
. . .

Para acceder a otro directorio, podemos emitir este comando:

cd testDirectory

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

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

lpwd
Local working directory: /Users/demouser

Podemos enumerar el contenido del directorio actual en el sistema local:

lls
Desktop			local.txt		test.html
Documents		analysis.rtf		zebra.html

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

lcd Desktop

Transferencia de Archivos con SFTP          

 SFTP transferencia de archivos

Navegar por los sistemas de archivos remotos y locales es de utilidad limitada sin poder transferir archivos entre los dos.

Transferencia de Archivos Remotos al Sistema Local

Si queremos descargar archivos de nuestro host remoto, podemos hacerlo emitiendo el siguiente comando:

get remoteFile
Fetching /home/demouser/remoteFile to remoteFile
/home/demouser/remoteFile                       100%   37KB  36.8KB/s   00:01

Como se puede ver, de forma predeterminada, el comando "get" descarga un archivo remoto en 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:

get remoteFile localFile

El comando "get" también toma algunos indicadores de opción. Por ejemplo, podemos copiar un directorio y todo su contenido especificando la opción recursiva:

get -r someDirectory

Podemos decirle a SFTP que mantenga los permisos y tiempos de acceso apropiados usando el indicador "-P" o "-p":

get -Pr someDirectory

Transferencia de Archivos Locales al Sistema Remoto

La transferencia de archivos al sistema remoto es tan fácil de lograr utilizando el comando "put" correctamente nombrado:

put localFile
Uploading localFile to /home/demouser/localFile
localFile                                     100% 7607     7.4KB/s   00:00

Las mismas banderas que funcionan con "get" se aplican a "put". Así que para copiar un directorio local completo, puede emitir:

put -r localDirectory
Note

Actualmente hay un error en las versiones de OpenSSH enviadas con las versiones actuales de Ubuntu (al menos 14.04 a 15.10) que impiden que el comando anterior funcione correctamente. Al emitir el comando anterior para transferir contenido a un servidor utilizando la versión buggy de OpenSSH, se mostrará el siguiente error: Couldn't canonicalise: No such file or directory .

Para evitar este problema, cree primero el directorio de destino en el extremo remoto escribiendo mkdir localDirectory . Después, el comando anterior debe completarse sin error.

Una herramienta familiar que es útil al descargar y cargar archivos es el comando "df", que funciona de forma similar a la versión de línea de comandos. Usando esto, puede comprobar que tiene suficiente espacio para completar las transferencias que le interesan:

df -h
    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 "!" una orden.

Los "!" Comando nos deja en un shell local, donde podemos ejecutar cualquier comando disponible en nuestro sistema local. Podemos comprobar el uso del disco escribiendo:

!
df -h
Filesystem      Size   Used  Avail Capacity  Mounted on
/dev/disk0s2   595Gi   52Gi  544Gi     9%    /
devfs          181Ki  181Ki    0Bi   100%    /dev
map -hosts       0Bi    0Bi    0Bi   100%    /net
map auto_home    0Bi    0Bi    0Bi   100%    /home

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

exit

Ahora debe ver el retorno de la solicitud SFTP.

Simple File Manipulations con SFTP

SFTP le permite realizar el tipo de mantenimiento básico de archivos que es útil cuando se trabaja con jerarquías de archivos.

Por ejemplo, puede cambiar el propietario de un archivo en el sistema remoto con:

chown userID file

Observe cómo, a diferencia del comando "chmod" del sistema, el comando SFTP no acepta nombres de usuario, sino que utiliza UIDs. Desafortunadamente, no existe una manera fácil de conocer el UID apropiado desde dentro de la interfaz SFTP.

Un trabajo involucrado podría realizarse con:

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

Observe cómo en vez de dar el "!" Comando por sí mismo, hemos utilizado utilizado como un prefijo para un comando de shell local. Esto funciona para ejecutar cualquier comando disponible en nuestro sistema local y podría haber sido usado con el comando local "df" anterior.

El UID estará en la tercera columna del archivo, como se delineó con caracteres de dos puntos.

Del mismo modo, podemos cambiar el propietario del grupo de un archivo con:

chgrp groupID file

Una vez más, no hay una manera fácil de obtener una lista de los grupos del sistema remoto. Podemos trabajar alrededor de él con el siguiente comando:

get /etc/group
!less group
root: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 nombre en la primera columna. Esto es lo que buscamos.

Afortunadamente, el comando "chmod" funciona como se espera en el sistema de archivos remoto:

chmod 777 publicFile
Changing mode on /home/demouser/publicFile

No hay ningún comando para manipular permisos de archivos locales, pero puede establecer el umask local, de modo que los archivos copiados al sistema local tengan los permisos adecuados.

Eso se puede hacer con el comando "lumask":

lumask 022
Local umask: 022

Ahora todos los archivos regulares descargados (siempre y cuando no se utilice el indicador "-p") tendrán 644 permisos.

SFTP le permite crear directorios tanto en sistemas locales como remotos con "lmkdir" y "mkdir", respectivamente. Estos funcionan como se esperaba.

El resto de los comandos de archivo sólo apuntan al sistema de archivos remoto:

ln
rm
rmdir

Estos comandos replican el comportamiento básico de las versiones de shell. Si necesita realizar estas acciones en el sistema de archivos local, recuerde que puede insertarse en un shell emitiendo este comando:

!

O ejecute un solo comando en el sistema local prefiriendo el comando con "!" ¿Comó?.

!chmod 644 somefile

Cuando haya terminado con su sesión SFTP, use "exit" o "bye" para cerrar la conexión.

bye

Conclusión

Aunque SFTP es una herramienta sencilla, es muy útil para administrar servidores y transferir archivos entre ellos.

Si está acostumbrado a usar FTP o SCP para realizar sus transferencias, SFTP es una buena manera de aprovechar los puntos fuertes de ambos. Si bien no es apropiado para cada situación, es una herramienta flexible para tener en su repertorio.

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (0 respuestas).