Comandos de sftp: get, put, ls, lcd y modo por lotes

Ejecuta sftp user@server para abrir un prompt. Usa get file para descargar, put file para subir, ls y cd en el servidor, lls y lcd en tu máquina, y bye para salir. Para scripts, escribe los comandos en un archivo y ejecuta sftp -b commands.txt user@server, que exige acceso con clave porque el modo por lotes no puede pedir una contraseña.

Actualizada el . sftp de OpenSSH 10.3 en macOS hacia OpenSSH 10.0 en Debian 13 en un contenedor desechable. El comando cp y el rechazo de rm -r se probaron con OpenSSH 10.0 en Debian 13.

Conectar

sftp user@server
sftp -P 2222 user@server
sftp user@server:/var/log/

La opción de puerto es -P en mayúscula. La última forma abre el prompt en esa carpeta.

Comandos en el prompt

Los comandos que empiezan por l actúan sobre tu máquina. Los demás actúan sobre el servidor.

ServidorTu máquinaQué hace
pwdlpwdMostrar la carpeta actual
cd /tmplcd dlCambiar de carpeta
ls -lallsListar archivos
mkdir uploadlmkdir uploadCrear una carpeta

Mover archivos

ComandoQué hace
get report.pdfDescargar a la carpeta local
get report.pdf copy.pdfDescargar con otro nombre
get -r site dl/site2Descargar una carpeta
put report.pdfSubir a la carpeta remota
put -r siteSubir una carpeta
reget big.binContinuar una descarga parcial
reput big.binContinuar una subida parcial

Gestionar archivos en el servidor

ComandoQué hace
rename old.pdf new.pdfRenombrar o mover
cp report.pdf copy.pdfCopiar un archivo en el servidor, si usa OpenSSH 9.0 o posterior
rm old.pdfBorrar un archivo
rmdir siteBorrar una carpeta vacía
chmod 640 fileCambiar permisos
ln -s target nameCrear un enlace simbólico
df -hMostrar el espacio libre
!lsEjecutar un comando en tu máquina
helpListar los comandos
byeSalir

No hay borrado recursivo: rm -r se detiene con rm: Invalid flag -r. rm borra un archivo y rmdir solo borra una carpeta vacía, así que una carpeta con contenido hay que vaciarla primero.

Un archivo sin el prompt

sftp user@server:/etc/hostname local-copy

Para copias rápidas, los ejemplos de scp suelen ser más cortos. La comparación completa está en scp, SFTP o rsync.

Modo por lotes para scripts

Pon los comandos en un archivo:

cd /tmp
put report.pdf
bye

Luego ejecútalo:

sftp -b commands.txt user@server

O lee de la entrada estándar con -:

printf 'put report.pdf /tmp/report.pdf\nbye\n' | sftp -b - user@server

Necesita acceso con clave

-b desactiva las peticiones de contraseña. Con una cuenta que solo admite contraseña, en nuestra prueba se detuvo con:

user@server: Permission denied (publickey,password).
Connection closed

Configura antes una clave. Consulta cómo generar una clave ed25519.

Se detiene en el primer error

Ese es el sentido de -b. Un comando que falla termina la ejecución con código de salida 1, de modo que tu script puede reaccionar:

$ sftp -b b2.txt user@server
sftp> cd /nosuch
stat remote: No such file or directory
$ echo $?
1

Para permitir un fallo en una línea, empiézala con -. Para ocultar el eco de una línea, empiézala con @:

-cd /nosuch
@pwd

Con la línea que empieza por -, la ejecución de nuestra prueba continuó y terminó con código de salida 0.

Canalizar comandos sin -b

sftp user@server < commands.txt no se detiene ante los errores. En nuestra prueba continuó tras un cd fallido y terminó con código de salida 0. Aun así puede pedir una contraseña desde tu terminal. Úsalo para un trabajo manual rápido. Usa -b en scripts.

Preguntas

¿Cómo se descarga una carpeta con sftp?

Con get -r, por ejemplo get -r site dl/site. Sin -r, sftp no descarga una carpeta.

¿Cómo se cambia la carpeta local en sftp?

Con lcd, por ejemplo lcd ~/Downloads. Los comandos que empiezan por l, como lls y lpwd, actúan en tu equipo, y los demás en el servidor.

¿Por qué sftp -b falla con Permission denied?

El modo batch no puede pedir una contraseña, así que necesita acceso con clave. Configura una clave SSH para la cuenta y vuelve a ejecutar sftp -b.

Fuentes

Más en SFTP y transferencia de archivos

Todas las guías