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.
| Servidor | Tu máquina | Qué hace |
|---|---|---|
pwd | lpwd | Mostrar la carpeta actual |
cd /tmp | lcd dl | Cambiar de carpeta |
ls -la | lls | Listar archivos |
mkdir upload | lmkdir upload | Crear una carpeta |
Mover archivos
| Comando | Qué hace |
|---|---|
get report.pdf | Descargar a la carpeta local |
get report.pdf copy.pdf | Descargar con otro nombre |
get -r site dl/site2 | Descargar una carpeta |
put report.pdf | Subir a la carpeta remota |
put -r site | Subir una carpeta |
reget big.bin | Continuar una descarga parcial |
reput big.bin | Continuar una subida parcial |
Gestionar archivos en el servidor
| Comando | Qué hace |
|---|---|
rename old.pdf new.pdf | Renombrar o mover |
cp report.pdf copy.pdf | Copiar un archivo en el servidor, si usa OpenSSH 9.0 o posterior |
rm old.pdf | Borrar un archivo |
rmdir site | Borrar una carpeta vacía |
chmod 640 file | Cambiar permisos |
ln -s target name | Crear un enlace simbólico |
df -h | Mostrar el espacio libre |
!ls | Ejecutar un comando en tu máquina |
help | Listar los comandos |
bye | Salir |
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.