Geekflare recibe el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliación de los enlaces de compra en este sitio.
En Linux y Redes de ordenadores Última actualización: 25 de septiembre de 2023
Compartir en:
Escáner de seguridad de aplicaciones web Invicti - la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

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&gt

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&gt

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&gt

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&gt
Para mostrar el directorio de trabajo actual del sistema local utilice el comando lpwd

sftp> lpwd
Directorio de trabajo local: /home/abhisheknair

sftp&gt

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&gt
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&gt

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&gt
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&gt

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&gt
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[23] que básicamente sube archivo2 y archivo3 y se salta archivo1 puesto que ya ha sido subido en el paso anterior. Puede utilizar cualquier comodín o expresión regular con mput

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&gt

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&gt
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&gt

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&gt
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&gt

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&gt

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&gt

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&gt

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&gt

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.

  • Abhishek Nair
    Autor
Gracias a nuestros patrocinadores
Más lecturas sobre Linux
Potencia tu negocio
Algunas de las herramientas y servicios que le ayudarán a hacer crecer su negocio.
  • Invicti utiliza el Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en tan solo unas horas.
    Pruebe Invicti
  • Web scraping, proxy residencial, gestor de proxy, desbloqueador web, rastreador de motores de búsqueda, y todo lo que necesita para recopilar datos web.
    Pruebe Brightdata
  • Monday.com es un sistema operativo de trabajo todo en uno que te ayuda a gestionar proyectos, tareas, trabajo, ventas, CRM, operaciones, flujos de trabajo y mucho más.
    Prueba Monday
  • Intruder es un escáner de vulnerabilidades en línea que encuentra puntos débiles de ciberseguridad en su infraestructura, para evitar costosas violaciones de datos.
    Prueba Intruder