Comandi sftp: get, put, ls, lcd e modalità batch

Esegui sftp user@server per aprire un prompt. Usa get file per scaricare, put file per caricare, ls e cd sul server, lls e lcd sulla tua macchina, e bye per uscire. Per gli script, elenca i comandi in un file ed esegui sftp -b commands.txt user@server, che richiede il login con chiave perché la modalità batch non può chiedere una password.

Aggiornata il . sftp di OpenSSH 10.3 su macOS verso OpenSSH 10.0 su Debian 13 in un container usa e getta. Il comando cp e il rifiuto di rm -r sono stati provati su OpenSSH 10.0 in Debian 13.

Connettersi

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

L'opzione per la porta è la -P maiuscola. L'ultima forma apre il prompt in quella cartella.

Comandi al prompt

I comandi che iniziano con l agiscono sulla tua macchina. Gli altri agiscono sul server.

ServerLa tua macchinaCosa fa
pwdlpwdMostra la cartella corrente
cd /tmplcd dlCambia cartella
ls -lallsElenca i file
mkdir uploadlmkdir uploadCrea una cartella

Spostare file

ComandoCosa fa
get report.pdfScarica nella cartella locale
get report.pdf copy.pdfScarica con un altro nome
get -r site dl/site2Scarica una cartella
put report.pdfCarica nella cartella remota
put -r siteCarica una cartella
reget big.binContinua un download parziale
reput big.binContinua un upload parziale

Gestire i file sul server

ComandoCosa fa
rename old.pdf new.pdfRinomina o sposta
cp report.pdf copy.pdfCopia un file sul server, se lì gira OpenSSH 9.0 o successivo
rm old.pdfElimina un file
rmdir siteElimina una cartella vuota
chmod 640 fileCambia i permessi
ln -s target nameCrea un link simbolico
df -hMostra lo spazio libero
!lsEsegue un comando sulla tua macchina
helpElenca i comandi
byeEsce

Non esiste un'eliminazione ricorsiva: rm -r si ferma con rm: Invalid flag -r. rm rimuove un solo file e rmdir rimuove solo una cartella vuota, quindi una cartella piena va prima svuotata.

Un file senza prompt

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

Per copie veloci gli esempi di scp sono spesso più corti. Il confronto completo è in scp, SFTP o rsync.

Modalità batch per gli script

Metti i comandi in un file:

cd /tmp
put report.pdf
bye

Poi eseguilo:

sftp -b commands.txt user@server

Oppure leggi dallo standard input con -:

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

Richiede il login con chiave

-b disattiva le richieste di password. Con un account che accetta solo la password, nella nostra prova si è fermato con:

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

Configura prima una chiave. Vedi come generare una chiave ed25519.

Si ferma al primo errore

È lo scopo di -b. Un comando che fallisce termina l'esecuzione con codice di uscita 1, così il tuo script può reagire:

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

Per permettere un errore su una riga, iniziala con -. Per nascondere l'eco di una riga, iniziala con @:

-cd /nosuch
@pwd

Con la riga che inizia con -, nella nostra prova l'esecuzione è proseguita ed è terminata con codice di uscita 0.

Passare i comandi con una pipe senza -b

sftp user@server < commands.txt non si ferma agli errori. Nella nostra prova è andato avanti dopo un cd fallito ed è terminato con codice di uscita 0. Può comunque chiedere una password dal tuo terminale. Usalo per un lavoro manuale veloce. Usa -b negli script.

Domande

Come si scarica una cartella con sftp?

Con get -r, per esempio get -r site dl/site. Senza -r, sftp non scarica una cartella.

Come si cambia la cartella locale in sftp?

Con lcd, per esempio lcd ~/Downloads. I comandi che iniziano con l, come lls e lpwd, agiscono sul tuo computer, gli altri sul server.

Perché sftp -b fallisce con Permission denied?

La modalità batch non può chiedere una password, quindi serve il login con chiave. Configura una chiave SSH per l'account e rilancia sftp -b.

Fonti

Altro in SFTP e trasferimento file

Tutte le guide