Esempi di scp: copiare file e cartelle via SSH

Per caricare un file esegui scp file.txt user@server:/tmp/. Per scaricarne uno, scp user@server:/tmp/file.txt .. Aggiungi -r per copiare una cartella e -P 2222 per un'altra porta, con la P maiuscola. Un percorso remoto richiede i due punti, perché senza scp tratta il nome come un file locale.

Aggiornata il . scp di OpenSSH 10.3 su macOS verso OpenSSH 10.0 su Debian 13 in un container usa e getta.

Esempi comuni

OperazioneComando
Caricare un filescp report.pdf user@server:/tmp/
Scaricare un filescp user@server:/tmp/report.pdf .
Scaricare con un nuovo nomescp user@server:/tmp/report.pdf copy.pdf
Caricare una cartellascp -r site user@server:/tmp/
Scaricare il contenuto di una cartellascp -r 'user@server:/tmp/site/*' dl/
Un'altra portascp -P 2222 file user@server:/tmp/
Usare una chiave specificascp -i ~/.ssh/id_work file user@server:/tmp/
Mantenere date e permessiscp -p file user@server:/tmp/
Limitare la velocità, in Kbit/sscp -l 800 file user@server:/tmp/
Comprimerescp -C file user@server:/tmp/
Passando da un jump hostscp -J user@jump file user@server:/tmp/

Anche qui funziona una voce Host in ~/.ssh/config: scp file server:/tmp/. Vedi il file di configurazione SSH.

La riga con -J passa da un jump host. Per salvare quel percorso una volta per tutte, vedi ProxyJump e jump host.

Copiare una cartella due volte la annida

Se la cartella di destinazione esiste già, scp -r mette la cartella al suo interno. Con /tmp/site già presente sul server, questo comando ci ha dato /tmp/site/site:

scp -r site user@server:/tmp/site

Quindi la prima esecuzione crea /tmp/site e la seconda crea /tmp/site/site. Per copiare una cartella più volte, usa invece rsync.

Nomi con spazi

scp "my file.txt" "user@server:/tmp/my file.txt"

Funziona con il protocollo SFTP predefinito. Con il vecchio protocollo di -O, la stessa riga è fallita con scp: ambiguous target, perché il lato remoto rilegge il nome. In quel caso aggiungi una seconda coppia di apici:

scp -O "my file.txt" 'user@server:"/tmp/my file.txt"'

Tra due server

scp -3 user@one:/tmp/file user@two:/tmp/

-3 fa passare i dati dalla tua macchina, quindi nessuno dei due server ha bisogno di un login sull'altro. Da OpenSSH 8.7 è il comportamento predefinito, quindi l'opzione lo rende solo esplicito. Nella nostra prova, anche una copia senza -3 è passata dal client locale.

Per far collegare direttamente il primo server al secondo, usa -R:

scp -R user@one:/tmp/file user@two:/tmp/

Il primo server deve allora poter fare login sul secondo senza alcuna richiesta, e deve già conoscerne la chiave host. Altrimenti ottieni Host key verification failed., che è quello che è successo nella nostra prova.

-O: il protocollo legacy

Da OpenSSH 9.0, scp usa di default il protocollo SFTP. Lo vedi con scp -v, che stampa Sending subsystem: sftp. Con -O stampa Sending command: scp -v -t /tmp/.

scp -O file user@server:/tmp/

Ti serve -O quando l'altra parte non ha il sottosistema SFTP, come alcuni dispositivi embedded. In quel caso l'errore tipico è subsystem request failed on channel 0. Vedi la guida a quell'errore.

Cosa scp non fa

  • Non riprende un trasferimento interrotto. Eseguilo di nuovo e ricomincia da capo.
  • Non invia solo ciò che è cambiato.

Per questo usa rsync, oppure reget in sftp. Per un confronto completo, leggi scp, SFTP o rsync.

Domande

Come si copia una cartella con scp?

Aggiungi -r: scp -r cartella user@server:/tmp/. Se la cartella di destinazione esiste già, scp ci mette dentro la cartella.

Come si usa scp con un'altra porta?

Con -P maiuscola, per esempio scp -P 2222 file user@server:/tmp/. La -p minuscola invece conserva date e permessi dei file.

scp può riprendere un trasferimento interrotto?

No. Se lo rilanci, ricomincia il file da capo. Usa rsync con --partial, oppure reget e reput dentro sftp.

Fonti

Altro in SFTP e trasferimento file

Tutte le guide