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.
| Server | La tua macchina | Cosa fa |
|---|---|---|
pwd | lpwd | Mostra la cartella corrente |
cd /tmp | lcd dl | Cambia cartella |
ls -la | lls | Elenca i file |
mkdir upload | lmkdir upload | Crea una cartella |
Spostare file
| Comando | Cosa fa |
|---|---|
get report.pdf | Scarica nella cartella locale |
get report.pdf copy.pdf | Scarica con un altro nome |
get -r site dl/site2 | Scarica una cartella |
put report.pdf | Carica nella cartella remota |
put -r site | Carica una cartella |
reget big.bin | Continua un download parziale |
reput big.bin | Continua un upload parziale |
Gestire i file sul server
| Comando | Cosa fa |
|---|---|
rename old.pdf new.pdf | Rinomina o sposta |
cp report.pdf copy.pdf | Copia un file sul server, se lì gira OpenSSH 9.0 o successivo |
rm old.pdf | Elimina un file |
rmdir site | Elimina una cartella vuota |
chmod 640 file | Cambia i permessi |
ln -s target name | Crea un link simbolico |
df -h | Mostra lo spazio libero |
!ls | Esegue un comando sulla tua macchina |
help | Elenca i comandi |
bye | Esce |
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.