Linux / Comando / sftp: transferir archivos de forma segura mediante SSH
SFTP (SSH File Transfer Protocol) permite transferir archivos y realizar operaciones remotas mediante una conexión SSH (Secure Shell) cifrada. El cliente sftp de OpenSSH se conecta con sftp USUARIO@HOST y utiliza la verificación de la clave del servidor y los métodos de autenticación de SSH.
sftp user@example.com
SFTP es distinto de FTP (File Transfer Protocol) y de FTPS, que protege FTP mediante TLS (Transport Layer Security). El servidor debe ofrecer el subsistema SFTP de SSH y el puerto TCP configurado para ese servicio. Los nombres example.com y las rutas de este artículo son ejemplos: necesita una cuenta autorizada y un servidor real para practicarlos.
Características de SFTP y comprobaciones antes de la conexión
sftp de OpenSSH realiza la transferencia de archivos a través de una conexión SSH cifrada y permite el uso de funciones de SSH como la autenticación mediante clave pública, archivos de configuración SSH y hosts intermedios. Puede consultar todas las opciones y los comandos interactivos en el manual oficial de sftp de OpenSSH.
- Dirección del servidor y puerto SSH
- Cuenta de usuario para iniciar sesión
- Contraseña o clave privada SSH
- Ruta confiable para verificar la huella digital de la clave del host del servidor
- Permisos de lectura y escritura para el directorio remoto
Compare la huella digital de la clave del host que se muestra al conectarse por primera vez con los valores obtenidos del administrador del servidor o de una pantalla de administración de confianza. Si aprueba sin verificar, podría pasar por alto un ataque de intermediario o la conexión a un servidor incorrecto.
Cómo conectarse al servidor
Conexión básica
sftp user@example.com
Cuando esté conectado, aparecerá el indicador sftp> y podrá ingresar comandos interactivos. Este indicador es solo para fines descriptivos y en el ejemplo de código a continuación solo se muestran los comandos.
Usar otro puerto SSH
sftp -P 2222 user@example.com
La opción de puerto de SFTP es la letra mayúscula -P. La minúscula -p es otra opción que solicita conservar la hora de modificación, la hora de acceso y los permisos del archivo a transferir, así que no la confunda.
Especificar clave privada
sftp -i ~/.ssh/id_ed25519 user@example.com
Restrinja la lectura de la clave privada y protéjala, cuando corresponda, con una frase de paso local; es diferente de la contraseña de la cuenta del servidor. Un agente SSH puede gestionar el uso de la clave. No copie la clave privada al servidor ni a una carpeta compartida: el servidor utiliza la clave pública autorizada.
Diferenciar entre rutas locales y remotas
En el modo interactivo de SFTP, los comandos que se ejecutan en el servidor remoto y en la computadora local son diferentes.
| Comando | Objetivo | Descripción |
|---|---|---|
pwd |
Remoto | Muestra el directorio actual del servidor remoto. |
lpwd |
Local | Muestra el directorio actual de la computadora donde se ejecuta SFTP. |
cd RUTA |
Remoto | Cambia el directorio remoto. |
lcd RUTA |
Local | Cambiar el directorio local. |
ls |
Remoto | Mostrar la lista de archivos remotos. |
lls |
Local | Mostrar la lista de archivos locales. |
mkdir |
Remoto | Crear un directorio remoto. |
lmkdir |
Local | Crear un directorio local. |
Es una buena costumbre verificar pwd y lpwd antes de la operación para no transferir archivos a lugares incorrectos.
Descargar archivos
Descargar un archivo
get reports/daily.csv
El segundo argumento indica la ruta local. Prepare primero la carpeta ./download y confirme con lpwd dónde se encuentra; el ejemplo no la crea. Los archivos de reports deben existir en el servidor y ser legibles. Los ejemplos de cada apartado son independientes, no una secuencia que deba ejecutar completa.
get reports/daily.csv ./download/daily.csv
Descargar varios archivos y directorios
get reports/*.csv
get -R reports
Los comodines pueden coincidir con nombres de archivos remotos. Al descargar directorios de forma recursiva, SFTP no sigue los enlaces simbólicos dentro del árbol y, según la versión del servidor y del cliente, las opciones compatibles pueden variar.
Reanudar descargas interrumpidas
reget archive.tar.zst
O puede reanudar transferencias parciales con get -a. Esto asume que el archivo parcial local es exactamente igual a la parte inicial del archivo remoto, por lo que si el archivo remoto ha cambiado, el resultado podría estar dañado. Para archivos importantes, compare la suma de verificación después de la transferencia.
Subir archivos
Subir un archivo
put ./release.tar.zst
Puede especificar la ruta de almacenamiento remoto o el nombre como el segundo argumento.
put ./release.tar.zst uploads/release.tar.zst
Cargar directorios de forma recursiva
put -R ./assets uploads/assets
Las cargas pueden sobrescribir archivos. Compruebe las carpetas locales y remotas con lpwd, pwd, lls y ls y prepare el destino permitido antes de transferir. En la copia recursiva, verifique el directorio resultante para evitar niveles duplicados. SFTP no sigue los enlaces simbólicos encontrados durante ese recorrido.
Reanudar cargas interrumpidas
reput ./large-image.img
put -a también intenta reanudar la carga parcial. Si el archivo parcial remoto no coincide con la parte inicial del archivo local, se puede crear un archivo dañado, así que verifique si hubo cambios y valide el hash al finalizar.
Rutas, espacios en blanco y manejo de nombres de archivos
Las rutas con espacios se deben encerrar entre comillas.
get "Monthly Reports/September Report.csv"
put "./Release Files/app package.tar.zst" uploads/
La interpretación de comandos interactivos de SFTP no es exactamente igual que la de una shell normal. Para nombres de archivos que contengan comodines o barras invertidas, primero verifique el nombre exacto en la lista, y en la automatización, es más seguro usar nombres de archivos simples y predecibles.
Gestionar la información de conexión usando el archivo de configuración SSH
Agrupar las opciones repetidas en la entrada Host
Si escribe un alias, usuario, puerto y la ruta de la clave en ~/.ssh/config, puede conectarse de manera rápida.
Host fileserver
HostName sftp.example.com
User deploy
Port 2222
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
sftp fileserver
No incluya la contraseña ni el contenido de la clave privada en el archivo de configuración. Restrinja los permisos del archivo y verifique la prioridad entre la configuración del sistema y la configuración del usuario.
Conectarse a través del host de salto
sftp -J bastion.example.com user@internal.example.com
-J usa ProxyJump para conectar mediante un host de salto. Verifique por una vía confiable las claves tanto del intermediario como del destino. No necesita activar la retransmisión del agente para todos los casos de ProxyJump; habilítela únicamente si su procedimiento la requiere y confía en los sistemas implicados.
Enviar automáticamente en modo batch
Crear un archivo batch
Guarde los comandos siguientes en upload.sftp y ejecútelos con el cliente SFTP, no como un script de Bash. Antes de hacerlo, prepare incoming en el servidor, ./exports/report.csv en el equipo local y una carpeta de prueba con un único proceso de carga. Los nombres fijos report.tmp y report.csv son ilustrativos; en una aplicación con cargas concurrentes, elija nombres temporales únicos y una política de reemplazo.
cd incoming
lcd ./exports
put report.csv report.tmp
rename report.tmp report.csv
bye
Subir con un nombre temporal y renombrarlo al terminar puede impedir que los consumidores lean un archivo parcial. Que la publicación sea atómica depende de las garantías de renombrado del servidor y del protocolo, además de que origen y destino estén en el mismo sistema de archivos. El cambio puede fallar si el destino existe; no suponga que sobrescribirá de forma atómica en todos los servidores. Esta operación tampoco demuestra por sí sola que los datos se hayan sincronizado físicamente a disco.
Ejecutar archivo por lotes
sftp -b upload.sftp fileserver
El modo por lotes no debe depender de la interacción con el usuario para solicitar contraseñas. Use cuentas dedicadas restringidas y autenticación de clave pública, y limite los permisos de clave, el origen de acceso y las rutas permitidas según la política del servidor. No incluya contraseñas en scripts ni en la línea de comandos.
Comprender el manejo de fallos
En el modo por lotes, si fallan los comandos principales como get, put, rename, generalmente se detiene el proceso. Puede ignorar fallos con - frente al comando, pero úselo solo de manera selectiva, ya que podría parecer que la tarea tuvo éxito mientras faltan archivos necesarios.
En la automatización, se debe verificar el estado de salida del proceso SFTP, el tamaño de los archivos transferidos y, si es posible, la suma de verificación; además, se deben establecer políticas de notificación y reintentos en caso de fallo.
Lista de verificación de seguridad y operaciones
- Clave del host: Compruebe la huella digital a través de una ruta confiable en el primer acceso y cuando se cambie la clave.
- Autenticación: La automatización utiliza claves públicas de alcance limitado y cuentas dedicadas en lugar de contraseñas.
- Clave privada: Limite los permisos de lectura y no se sube a repositorios, carpetas compartidas de respaldo o servidores.
- Permisos de ruta: Se restringe el acceso a los directorios necesarios solo para la cuenta de subida.
- Sobrescritura: Se verifica la ruta de destino y los archivos existentes, utilizando nombres temporales y políticas de conservación de versiones.
- Integridad: Transferencias importantes generan y comparan sumas de verificación confiables en ambos lados.
- Registro: Se registran éxitos y fallos de transferencia y el destino, pero no se almacenan contraseñas, claves privadas ni contenido de archivos sensibles.
Comparación de SFTP, SCP, rsync
| Herramientas | Situaciones adecuadas | Características |
|---|---|---|
sftp |
Gestión de archivos interactiva y transferencia estandarizada | Proporciona lista remota, cambio de directorio, reanudación y comandos por lotes. |
scp |
Copia de archivos sencilla | Es fácil de copiar con un solo comando, pero las funciones de gestión remota interactiva son limitadas. |
rsync |
Sincronización repetida y directorios grandes | Proporciona transferencia de cambios, reglas de exclusión y sincronización de eliminación, pero también requiere un entorno de soporte en el servidor. |
El hecho de que cualquier herramienta use SSH no significa automáticamente que los permisos de la cuenta y los procedimientos de implementación sean seguros. Elija según el propósito de la transferencia y el método de recuperación ante fallos.
Preguntas frecuentes
¿Es SFTP FTP con TLS aplicado?
No. SFTP es el SSH File Transfer Protocol y funciona sobre la conexión SSH. FTPS es un método separado que aplica TLS a FTP y la configuración del servidor y la estructura de puertos son diferentes.
¿Cuál es la razón por la que ocurre el error Connection refused?
La dirección o el puerto pueden ser incorrectos, el servicio SSH puede no estar escuchando o el firewall puede rechazar la conexión. Compruebe la dirección del servidor, el puerto indicado mediante -P en mayúscula, el estado del servicio SSH y las políticas de red.
¿Qué hacer si aparece Permission denied?
Debe distinguir si el fallo proviene de la autenticación en sí o de la falta de permisos de archivos tras iniciar sesión. Revise la información de diagnóstico de conexión con sftp -v, pero no comparta directamente nombres de usuario, rutas ni información del servidor en registros públicos.
¿Cómo verificar si la carga se completó?
Verifique el estado de finalización y el tamaño del archivo remoto, y para archivos importantes, calcule y compare sumas de verificación como SHA-256 tanto local como remotamente. Si el servidor SFTP es una cuenta restringida que no permite la ejecución arbitraria de comandos, puede ser necesario un API de verificación separado o un procedimiento de procesamiento en el servidor.




