fb-pixel

Come usare il comando scp per trasferire file e cartelle

Pubblicato in:

by:

Se devi trasferire file tra due server remoti o tra una macchina locale e una remota, una delle migliori opzioni è utilizzare il comando scp su Linux.

Con questo comando è possibile fare copie da e verso server remoti o tra due server remoti, inoltre puoi sfruttare le opzioni per modificare la porta da usare o per mantenere gli attributi dei file dopo la copia.

Vediamo come si usa il comando.

Sintassi del comando scp

Rispetto ad altri comandi per la copia come cp, per la copia in locale, e rsync per sincronizzazioni e backup, il comando scp si usa per copiare file in modo sicuro, e principalmente è usato per eseguire una copia di file da o verso una macchina remota. Come vedremo in questa guida può anche essere usato per effettuare copie tra due server remoti.

Per poter utilizzare questo comando è necessario aver attiva una connessione SSH su entrambe le macchine (ad esmepio PC locale e server remoto).

Se non l’hai ancora fatto puoi leggere la nostra guida per sapere come stabilire una connessione SSH.

La sintassi di base del comando scp è questa:

scp [opzioni] /percorso-sorgente/ user@host:percorso-di-destinazione/

L’esempio qui sopra si riferisce alla sintassi di un trasferimento da locale a remoto.

Passiamo ora alla pratica e andiamo a vedere dei casi d’uso specifici in cui utilizzare il comando scp.

Casi d’uso del comando scp

Vediamo come usare il comando scp per tre operazioni principali:

  • eseguire una copia da locale a remoto;
  • copiare da remoto a locale;
  • fare copie di file (e cartelle) tra due server remoti.

Una nota importante sull’utilizzo del comando scp: come succede per altri comandi Linux simili tra cui cp e rsync, anche scp sovrascrive senza richiedere conferma. Prima di eseguire una copia quindi è bene verificare la directory di destinazione per controllare che non ci siano file con lo stesso nome ed evitare di sovrascrivere accidentalmente file e cartelle.

Come fare una copia da locale a remoto

Il primo esempio che andiamo a vedere consiste nel copiare dei file o una cartella locale su una destinazione remota.

Come dicevamo all’inizio, per effettuare questo tipo di copia, dobbiamo assicurarci di poterci collegare via SSH al server o alla macchina remota.

Per copiare un file la sintassi da usare è questa:

scp /percorso-del-file-locale/file user@host:/percorso-remoto/

Dobbiamo quindi indicare prima il percorso del file sul computer locale, seguito dalla cartella sul server remoto in cui verrà caricato il file. Dopodiché ci verrà richiesta la password dell’utente per poter stabilire una connessione SSH con il server remoto.

Vediamo un esempio pratico:

scp lista_domini.txt fabrizio@192.168.1.6:/home/fabrizio/prova-scp/lista.txt

Cosa fa il comando qui sopra?

  • lista_domini.txt è il nome del file che voglio copiare. Nota che non ho specificato il percorso perché il file si trova nella cartella corrente. Ricordati che per conoscere la cartella corrente puoi usare pwd e per cambiare cartella ti basta usare il comando cd.
  • fabrizio@192.168.1.6 questo indica l’user (fabrizio) e l’IP della macchina remota, nel nostro esempio è connessa alla rete locale per questo vedi un IP locale.
  • /home/fabrizio/prova-scp/lista.txt in questo caso stiamo specificando il percorso di destinazione e scegliendo un nuovo nome per il file “lista.txt”.
Comando Scp Copia Da Locale A Remoto

Se, invece, volessimo copiare un’intera cartella, il procedimento è simile, ma in questo caso dobbiamo anche usare l’opzione -r del comando scp che ci permette di fare una copia ricorsiva e copiare tutto il contenuto della cartella (comprese eventuali sottocartelle).

La sintassi per copiare una cartella è questa:

scp -r /percorso-origine-cartella user@host:/percorso-di-destinazione/

Per esempio:

scp -r supporthost fabrizio@192.168.1.6:/home/fabrizio/prova-scp/
Comando Scp Copia Cartella Da Locale A Remoto

Con il comando qui sopra stiamo copiando il contenuto della cartella locale “supporthost” nel server remoto, al percorso indicato nella cartella “prova-scp”.

Come fare una copia da remoto a locale

Il comando scp ci permette anche di copiare file da un server remoto a un computer locale. Si tratta di un’operazione che può essere molto utile ad esempio per fare un backup di un file o per poter modificare localmente un file.

La sintassi del comando per una copia di un file da remoto a locale è questa:

scp user@host:/percorso-di-origine/file /percorso-destinazione/

Se si tratta di una cartella dovremo usare l’opzione -r, in questo modo:

scp -r user@host:/percorso-di-origine/ /percorso-destinazione/

Come vedi la sintassi è molto simile a quella degli esempi precedenti in cui abbiamo visto come fare una copia da locale a remoto. In questo caso però è importante notate che bisogna indicare prima il server remoto che costituisce la sorgente e poi quello locale che in questo caso è la destinazione.

Vediamolo con degli esempi pratici che ci permettono anche di capire l’importanza del trailing slash (lo slash finale dopo il nome delle cartelle).

Se voglio copiare solo il contenuto della cartella “file-nuovi” nella cartella locale “backup”, userò il comando in questo modo:

scp -r fabrizio@192.168.1.6:/home/fabrizio/prova-scp/file-nuovi /home/vbox/backup

Nota che alla fine della cartella di origine, “file-nuovi” non ho indicato lo slash finale.

Se, invece, voglio copiare tutta la cartella “file-nuovi” con il suo contenuto, nella cartella locale “backup”, dovrò usare lo slash finale, così:

scp -r fabrizio@192.168.1.6:/home/fabrizio/prova-scp/file-nuovi/ /home/vbox/backup

Nell’output dell’esempio qui sotto puoi vedere la differenza in base all’uso del trailing slash.

Comando Scp Copia Da Remoto A Locale

Come fare una copia tra due server remoti

Un altro utilizzo del comando scp è quello di fare una copia di file tra due server remoti.

In questo caso la procedura è molto simile agli esempi che abbiamo visto prima, ma trattandosi di due server remoti ci verrà richiesto l’accesso a entrambi per proseguire. Dovrai quindi avere entrambi i dati di accesso alle due macchine remote.

La sintassi è questa:

scp -r user@host-sorgente:/percorso-sorgente/ user@host-destinazione:/percorso-destinazione

Per esempio immaginiamo di voler copiare la cartella “supporthost” dal server sorgente 192.168.1.6 al server destinazione 192.168.1.2, il comando sarà come questo:

scp -r fabrizio@192.168.1.6:/home/fabrizio/prova-scp/supporthost/ maria@192.168.1.2:/home/maria/backup/

Nota: ricordati che bisogna prima specificare il percorso della sorgente e poi quello della destinazione.

Nell’esempio qui sopra la cartella “supporthost” del server di origine viene copiata all’interno della cartella “backup” del server di destinazione.

Opzioni principali del comando scp

Come altri comandi Linux, anche scp ha delle opzioni che possono esserci utili in base al tipo di copia che dobbiamo fare. In particolare le opzioni di scp ci permettono di modificare il trasferimento limitando la banda o cambiando le impostazioni di connessione ad esempio specificando una porta in particolare.

Come fare una copia mantenendo gli attributi dei file

Se vogliamo far sì che gli attributi dei file e in particolare i timestamp di modifica e accesso al file siano mantenuti dopo la copia, possiamo usare il comando scp con l’opzione -p.

La sintassi è questa:

scp -p /percorso-origine/file /percorso-destinazione/

Per esempio:

scp -p fabrizio@192.168.1.6:/home/fabrizio/prova-scp/file-nuovi/appuntimg.txt /home/vbox/backup

Nell’esempio qui sopra, aggiungendo l’opzione -p, stiamo facendo sì che gli attributi del file vengano mantenuti.

Nei due output qui sotto si può vedere che dopo la copia, il file ha mantenuto lo stesso timestamp per la data di accesso e modifica.

Comando Scp Copia Con Opzione P

Come fare una compressione durante la copia

Se vogliamo fare copie di file molto pesanti, possiamo usare l’opzione di compressione del comando scp.

Ci basta aggiungere l’opzione -C al comando, in questo modo il file verrà compresso durante il trasferimento e poi decompresso una volta spostato nella destinazione.

scp -C fabrizio@192.168.1.6:/home/fabrizio/prova-scp/file-nuovi/appuntimg.txt /home/vbox/backup

Modificare il limite di banda durante il trasferimento

Il comando scp ha anche un’opzione che ci permette di impostare un limite di banda usando l’opzione -l.

Il valore va indicato in Kbit/s, quindi per impostare un limite a 200 Kilobyte dovremo indicare 1600 Kilobit.

scp -l 1600 alpine-standard.iso fabrizio@192.168.1.6:/home/fabrizio/prova-scp/

Cambiare la porta o il protocollo

Per impostazione predefinita, quando non usiamo un’opzione per modificarla, il comando scp utilizzerà la porta 22. Se ad esempio vogliamo usare una porta differente, ci basterà specificarla con l’opzione -P.

scp -P 2299 fabrizio@192.168.1.6:/home/fabrizio/prova-scp/file-nuovi/appuntimg.txt /home/vbox/backup

Nell’esempio qui sopra stiamo richiedendo di usare la porta 2299.

Se, invece vogliamo forzare l’uso degli IPv4 o degli IPv6, ci basta usare rispettivamente:

  • l’opzione -4 per gli IPv4
  • l’opzione -6 per gli IPv6.

Per esempio:

scp -4 /home/vbox/lista.txt fabrizio@192.168.1.6:/home/fabrizio/prova-scp/

Attivare o disattivare gli avvisi durante la copia

Quando usiamo il comando scp in base al caso specifico potremmo voler avere più informazioni durante il trasferimento, soprattutto quando ci sono errori su cui vogliamo indagare, in questo caso ci può far comodo usare l’opzione -v (verbose):

scp -v /percorso-origine/ user@host:/percorso-destinazione

L’opzione -v ci permette anche di capire se ci sono problemi di connessione perché ci da indicazioni sul tipo di autenticazione che stiamo usando, ad esempio quella via password.

Al contrario, quando preferiamo che la copia proceda senza che venga mostrato in output il progresso o eventuali avvisi, possiamo usare l’opzione -q (che attiva la modalità quiet):

scp -q /percorso-origine/ user@host:/percorso-destinazione

Conclusioni

Abbiamo visto come usare il comando scp su Linux per fare copie usando un trasferimento sicuro che si basa sulla connessione SSH. Con questo comando è possibile copiare i file in sicurezza, basta aver prima stabilito una connessione SSH sul server di origine e/o di destinazione.

Avevi mai usato questo comando prima? Cosa ne pensi? Facci sapere con un commento.


Prova gratis e senza impegno uno dei nostri piani hosting per 14 giorni. Non è richiesto nessun dato di pagamento!

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *