SFTP o Protocolo Seguro de Transferencia de Archivos es una utilidad segura de transferencia remota de archivos basada en el Protocolo de Transferencia de Archivos (FTP)
El tráfico FTP no está cifrado y es inseguro, por lo que ha sido sustituido en su mayor parte por SFTP
SFTP se ejecuta por defecto sobre el protocolo SSH en el puerto TCP 22 y ofrece el mismo conjunto de capacidades de seguridad y encriptación que SSH. El demonio SSH por defecto que se ejecuta como parte del servidor OpenSSH en sistemas Linux soporta las características básicas del protocolo SFTP por defecto aunque existe software dedicado independiente disponible como vsftpd
que puede configurarse para obtener características y personalizaciones adicionales
En este artículo, cubriremos el uso de SFTP desde la línea de comandos. Usaré un sistema Ubuntu aunque los comandos listados aquí funcionarán en cualquier sistema Linux con cliente sftp
Antes de entrar en los comandos, debe saber que SCP queda obsoleto y como alternativa, es bueno familiarizarse con el comando SFTP. Con SFTP puede hacer prácticamente todo lo que hace con SCP
Copiar archivos
SFTP puede utilizarse como sustituto del comando SCP (Copia Segura) en algunos casos de uso compatibles. Uno de estos casos es utilizar SCP para subir o bajar archivos de un servidor remoto de una sola vez
La sintaxis para subir archivos utilizando el comando SCP es la siguiente
$ scp {ruta-local} {usuario}@{host-remote}:{ruta-remote}
Y para la descarga así
$ scp
{usuario}@{host-remote}:{ruta-archivo-remote} {ruta-local}
Del mismo modo, podemos utilizar la siguiente sintaxis del comando sftp
para subir archivos a un servidor remoto
$ sftp {usuario}@{host}:{ruta-remota} <<< $'put {ruta-local}'
A continuación se muestra una demostración de la carga de archivos mediante s ftp en una sola línea
$ sftp ftpuser@192.168.1.231:/home/ftpuser/remote_test_dir <<< $'put /home/abhisheknair/archivo_nuevo'
Contraseña de ftpuser@192.168.1.231:
Conectado a 192.168.1.231.
Cambiando a: /home/ftpuser/remote_test_dir
sftp> poner
/home/abhisheknair/archivo_nuevo
Cargando /home/abhisheknair/archivo_nuevo a /home/ftpuser/remote_test_dir/archivo_nuevo
/home/abhisheknair/archivo_nuevo
100% 9 7.2KB/s 00:00
$
Para descargar un archivo de un servidor remoto, utilice la siguiente sintaxis de comando
$
sftp {usuario}@{host-remote}:{nombre-archivo-remote} {nombre-archivo-local}
He aquí una demostración de la descarga de un archivo en una línea utilizando sftp
$ sftp ftpuser@192.168.1.231:/home/ftpuser/new_file1 /home/abhisheknair/nuevo_archivo_local
Contraseña de ftpuser@192.168.1.231:
Conectado a 192.168.1.231.
Buscando
/home/ftpuser/nuevo_archivo1 to /home/abhisheknair/nuevo_archivo_local/nuevo_archivo1
/home/ftpusuario/nuevo_archivo1
100% 12 3.6KB/s 00:00
$
También puede intercambiar la clave SSH para una autenticación sin contraseña
Conexión a un servidor SFTP
Para iniciar una conexión SFTP, utilice el comando sftp
con un nombre de usuario y el nombre o IP del host remoto. El puerto TCP 22 por defecto debe estar abierto para que esto funcione o bien especifique explícitamente el puerto utilizando la bandera -oPort
Me estoy conectando a un servidor SFTP con IP 192.168.1.231
. La primera vez que se conecte a un servidor SFTP, se le pedirá que confirme la huella digital del servidor como SSH. Una vez confirmada tecleando'sí' la conexión procede y solicita la contraseña del usuario
En una conexión exitosa, se le mostrará el prompt sftp>
$ sftp ftpuser@192.168.1.231
No se puede establecer la autenticidad del host '192.168.1.231 (192.168.1.231)'.
La huella digital de la clave ECDSA es SHA256:k90E28Pfnjoiq1svFw18dA2mazweoCmR5Hqi8SH0mj0.
¿Está seguro de que desea continuar la conexión (sí/no/[huella digital])? sí
Advertencia: Añadido permanentemente '192.168.1.231' (ECDSA) a la lista de hosts conocidos.
Contraseña de ftpuser@192.168.1.231:
Conectado a 192.168.1.231.
sftp>
Comprobar versión
Puede comprobar la versión de SFTP utilizando el comando version
en el indicador sftp
sftp>
versión
Protocolo SFTP versión 3
sftp>
Obtener ayuda
Para obtener ayuda sobre los comandos disponibles y la sintaxis de SFTP, utilice '?' o'ayuda‘
sftp> ?
Comandos disponibles:
bye Salir de sftp
cd ruta Cambiar el directorio remoto a 'ruta'
chgrp [-h] grp ruta Cambiar el grupo del archivo 'ruta' a 'grp'
chmod [-h] modo ruta Cambiar los permisos del archivo 'ruta' a 'modo'
chown [-h] propio ruta Cambiar el propietario del archivo 'ruta' a 'propio'
df [-hi] <x><x>[</x></x> ruta] Mostrar estadísticas del directorio actual o
sistema de archivos que contiene 'ruta'
exit Salir de sftp
get [-afpR] remote <x>[local]</x> Descargar archivo
help Mostrar este texto de ayuda
lcd ruta Cambiar el directorio local a 'ruta'
lls [ls-options <x><x>[ruta]</x></x>] Muestra el listado del directorio local
lmkdir ruta Crea el directorio local
ln [-s] oldpath newpath Enlaza el archivo remoto (-s para enlaces simbólicos)
lpwd Imprime el directorio de trabajo local
ls [-1afhlnrSt] <x><x>[ruta]</x></x> Muestra el listado del directorio remoto
lumask umask Establece la umask local en 'umask'
mkdir ruta Crea el directorio remoto
progress Alterna la visualización del medidor de progreso
put [-¡afpR] local [ <x>remoto</x> ] Subir archivo
pwd Mostrar directorio de trabajo remoto
quit Salir de sftp
reget [-fpR] remoto <x>[local]</x> Reanudar descarga de archivo
rename oldpath newpath Renombrar archivo remoto
reput [-fpR] local <x>[remoto]</x> Reanudar subida de archivo
rm path Eliminar archivo remoto
rmdir path Eliminar directorio remoto
symlink oldpath newpath Symlink archivo remoto
version Mostrar versión de SFTP
!¡command Ejecutar 'command' en el shell local
! Escapar al shell local
? Sinónimo de ayuda
sftp>
Mostrar directorio de trabajo
Cuando esté conectado a un servidor remoto, puede mostrar el directorio de trabajo actual del sistema remoto utilizando el comando pwd
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp>
Para mostrar el directorio de trabajo actual del sistema local utilice el comando lpwd
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair
sftp>
Listar archivos
Puede listar los archivos del directorio de trabajo remoto utilizando el comando ls
sftp>
ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
Para listar los archivos del directorio de trabajo local, utilice el comando lls
sftp> lls
bin archivo1 archivo2 archivo3 lib oci-scripts sys_info.sh test.tgz testdir
sftp>
Cambio de directorios
El cambio del directorio de trabajo remoto puede realizarse utilizando el comando cd
. Consulte el siguiente ejemplo
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> cd remote_test_dir
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser/remote_test_dir
sftp>
Para cambiar el directorio de trabajo local, utilice el comando lcd
. A continuación se muestra un ejemplo sencillo para mostrar el uso de lcd
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lcd testdir
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair/testdir
sftp>
Cargar archivos
Para subir un único archivo, utilice el comando put
. Vea cómo subo el archivo local archivo1 al directorio de trabajo remoto utilizando el comando put. Puedo verificarlo utilizando el comando ls que imprime el contenido del directorio de trabajo remoto
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp>
put fichero1
Subiendo fichero1 a /home/ftpuser/file1
file1 100% 6 6.0KB/s 00:00
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
Para subir varios archivos de una sola vez, podemos utilizar el comando mput
como se muestra a continuación. Yo utilizo mput
con un patrón de expresión regular archivo
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair
sftp> ls
file1 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> mput file<x>[23]</x>
Subiendo file2 a /home/ftpuser/file2
file2 100% 6 6.5KB/s 00:00
Subiendo fichero3 a /home/ftpuser/file3
file3 100% 6 5.3KB/s 00:00
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
Descargar archivos
Un solo archivo usando SFTP puede ser descargado usando el comando get
. Aquí hay un ejemplo donde descargué archivo_remoto4 utilizando sftp
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser/remote_test_dir
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair/testdir
sftp> ls
remote_file4
sftp> lls
file4
sftp> get remote_file4
Fetching /home/ftpuser/remote_test_dir/remote_file4 to remote_file4
/home/ftpuser/remote_test_dir/remote_file4 100% 13 5.2KB/s 00:00
sftp>
lls
archivo4 remoto_archivo4
sftp>
Para descargar varios archivos, utilice el comando <strong>mget</strong>
. Aquí estoy descargando todos los archivos que coinciden con el patrón archivo_remoto* en el directorio de trabajo remoto a mi directorio de trabajo local. Finalmente utilizo el comando <strong>lls</strong>
para ver los archivos descargados
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair/testdir
sftp> ls
remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> lls
file4 remote_file4
sftp> mget remote_file*
Fetching /home/ftpuser/remote_file1 to remote_file1
/home/ftpuser/remote_file1 100% 12 5.9KB/s 00:00
Fetching /home/ftpuser/remote_file2 to remote_file2
/home/ftpuser/remote_file2 100% 13 5.8KB/s 00:00
Fetching /home/ftpuser/remote_file3 to remote_file3
/home/ftpuser/remote_file3 100% 13
7.3KB/s 00:00
sftp>
lls
file4 remote_file1 remote_file2 remote_file3 remote_file4
sftp>
Crear directorio
Se puede crear un nuevo directorio en un servidor remoto utilizando el comando mkdir
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp> mkdir new_dir
sftp>
ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
Del mismo modo, si desea crear un nuevo directorio en el directorio de trabajo actual del sistema local desde el indicador sftp, utilice el comando lmkdir
sftp> lpwd
Directorio de trabajo local: /home/abhisheknair
sftp> lls
bin file1 file2 file3 lib oci-scripts sys_info.sh test.tgz testdir
sftp> lmkdir
new_local_dir
sftp>
lls
bin file1 file2 file3 lib new_local_dir oci-scripts sys_info.sh test.tgz testdir
sftp>
Eliminar directorio
Un directorio remoto vacío puede ser eliminado utilizando el comando rmdir
. Tenga en cuenta que si no está vacío, obtendrá un error
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> ls
file1 file2 file3 new_dir remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
rmdir new_dir
sftp>
ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
Eliminar archivo
Se puede eliminar un archivo remoto utilizando el comando rm
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_file3 remote_test_dir
sftp>
rm remote_file3
Eliminar /home/ftpuser/remote_file3
sftp>
ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp>
Renombrar archivo
Un archivo remoto también puede renombrarse fácilmente utilizando el comando rename
sftp> pwd
Directorio de trabajo remoto: /home/ftpuser
sftp> ls
file1 file2 file3 remote_file1 remote_file2 remote_test_dir
sftp> renombrar
remote_file1 new_file1
sftp>
ls
file1 file2 file3 new_file1 remote_file2 remote_test_dir
sftp>
Uso del sistema de archivos
Para mostrar las estadísticas del directorio actual o del sistema de archivos que contiene 'ruta', utilice el comando df
. Podemos utilizar la bandera -h
para mostrar las estadísticas en un formato legible por humanos. Tenga en cuenta que las estadísticas mostradas son para el respectivo sistema de archivos del servidor SFTP remoto y no para el sistema de archivos de la máquina local
sftp> df
Tamaño Utilizado Disponible (root) Êpacidad
17811456 1845472 15965984 15965984 10%
sftp>
df -h
Tamaño Utilizado Disponible (root) Êpacidad
17.0GB 1.8GB 15.2GB 15.2GB 10%
sftp>
Salir de la sesión SFTP
Para salir de la sesión SFTP, utilice el comando bye
, exit
o quit
. Volverá al prompt de su sistema operativo después de salir de SFTP
sftp> exit
$
Conclusión
SFTP es una de las mejores opciones disponibles que es segura así como fácil de usar. Ofrece tanto funciones CLI como GUI y es compatible con diferentes plataformas. Consulte la página principal de sftp
para más información
$ man sftp
Si está interesado en aprender más entonces eche un vistazo a este curso Udemy Linux Mastery.