Un semplice tutorial per aiutarti a trasferire file su un sistema remoto dal tuo sistema Linux usando il comando scp.
SCP sta per "Secure Copy". scp
è un'utilità della riga di comando offerta da Linux che consente il trasferimento di file e directory da una macchina a un'altra su una rete non sicura.
Se desideri copiare file da un sistema a un altro, allora scp
può essere un'ottima opzione per effettuare un trasferimento sicuro di file e directory. Quando le due macchine comunicanti sono collegate sulla stessa rete, quindi utilizzando scp
diventa possibile.
Puoi fare molto affidamento su scp
comando per la riservatezza e l'integrità poiché il file che viene trasferito e la password utilizzata per il trasferimento sono entrambi crittografati. Nessuna informazione sensibile verrà rivelata anche se qualcuno cerca di curiosare nel traffico mentre questo trasferimento è in corso.
In questo tutorial, vedremo diversi esempi di scp
comando. Esamineremo anche alcune delle opzioni utilizzate di frequente con il scp
comando.
Iniziare con il comando scp
Usando il scp
comando puoi trasferire file/directory:
- Dalla tua macchina locale a una macchina remota.
- Tra due macchine remote.
- Da una macchina remota alla tua macchina locale.
Sintassi generale:
scp [Opzione] [nome_file_origine] [utente@host_destinazione]:cartella_destinazione
Cerchiamo di capire gli attributi di base di questo comando uno per uno.
- [nome_file_sorgente] Questo è il file sorgente che vuoi copiare.
- [utente@destinazione_host] Questo è il nome utente del sistema remoto in cui si desidera copiare il file. L'indirizzo IP della macchina remota viene utilizzato anche in questo attributo dopo il '
@
' simbolo. - [la cartella di destinazione] Questa è la directory in cui vuoi salvare il file copiato.
Nota: Il colon (:
) viene utilizzato nella sintassi in quanto distingue tra le posizioni locali e remote. Usiamo i due punti (:
) con il sistema remoto per specificare la directory in cui devono essere copiati i file. Nel caso in cui non specifichiamo la directory di destinazione, i file verranno copiati nella directory home dell'utente del sistema remoto.
Opzioni utilizzate con scp
Alcune delle opzioni più popolari utilizzate con il scp
comando sono elencati di seguito.
Opzione | Descrizione |
-C | consentire la compressione del file da trasferire |
-v | dai l'output dettagliato |
-R | copiare file e directory in modo ricorsivo |
-P | preservare permessi, modalità e tempi di accesso ai file |
-P | cambia la porta predefinita usata da scp comando |
Vedremo gli esempi di queste opzioni, più avanti nel tutorial.
Copia di file da locale a un sistema remoto
scp
consente di trasferire file dal sistema locale a un sistema remoto utilizzando la seguente sintassi. Ciò ti consente di trasferire o caricare i tuoi file su un server remoto.
Sintassi generale:
scp [nome_file] utente_remoto@host:[cartella_destinazione]
Esempio:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
In questo esempio, stiamo copiando un file "apache-tomcat-9.0.8.tar.gz" dal sistema locale al sistema remoto il cui indirizzo IP è "143.110.178.221".
Sul sistema remoto, il file verrà ora copiato nella directory denominata "gaurav".
Produzione:
gaurav@ubuntu:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav [email protected] password di: apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB /s 02:00 gaurav@ubuntu:~$
Controlliamo l'output sul sistema remoto per il file.
root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls apache-tomcat-9.0.8.tar.gz root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#
Pertanto, il file viene copiato con successo nel sistema remoto utilizzando il scp
comando.
Copia di più file su un sistema remoto
Nell'esempio precedente, abbiamo imparato a trasferire un file al sistema remoto utilizzando il pulsante scp
comando. Vedremo ora il metodo per trasferire più file dal tuo sistema locale a un sistema remoto usando questo comando.
Sintassi generale:
scp [file 1] [file 2] [file n] nomeutente_remoto@host_remoto:[directory specifica]
Cerchiamo di capire questo semplice processo con un esempio.
Esempio:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
Qui, più file sono menzionati nel comando da copiare sul sistema remoto.
Produzione:
gaurav@ubuntu:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav [email protected] password di: ath.html 100% 199KB 94.7KB/s 00: 02 abc.txt 100% 0 0.0KB/s 00:00 ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42,2KB/s 00:00 gaurav@ubuntu:~$
Sul sistema remoto:
root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls -l total 9800 -rw-r--r-- 1 root root 0 5 ottobre 08:58 abc.txt -rw-r-- r-- 1 radice radice 9818695 5 ottobre 08:35 apache-tomcat-9.0.8.tar.gz -rw-r--r-- 1 radice radice 204057 5 ottobre 08:58 ath.html -rw-r-- r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#
Tutti e tre i file vengono ora copiati sul sistema remoto.
Copiare una directory nel sistema remoto
Puoi usare scp
comando per copiare una directory dal sistema locale al sistema remoto. Il processo è simile a quello della copia di un file. Per copiare anche il contenuto della directory, puoi usare il pulsante -R
opzione con il scp
comando.
Il -R
l'opzione viene utilizzata per copiare una directory in modo ricorsivo. Ciò significa che verranno copiati anche tutte le sottocartelle e i file all'interno della directory.
Sintassi generale:
scp -r [percorso directory] nomeutente_remoto@host_remoto:[directory_destinazione]
Esempio:
scp -r PycharmProjects [email protected]:gaurav
Produzione:
gaurav@ubuntu:~$ scp -r PycharmProjects [email protected]:gaurav [email protected] password di: __main__.py 100% 623 7.8KB/s 00:00 __init__.py 100% 23 0.4KB/s 00 :00complete.py 100% 2929 28,1 KB/s 00:00 search.py 100% 4728 38,7 KB/s 00:00 uninstall.py 100% 2963 32,5 KB/s 00:00 hash.py 100% 1681 21,3 KB/ s 00:00 check.py 100% 1430 16,8 KB/s 00:00 configuration.py 100% 7125 50,4 KB/s 00:00 show.py 100% 6289 49,8 KB/s 00:00 download.py 100% 6623 48,2 KB/s 00:00 gaurav@ubuntu:~$
Usando il -R
opzione con il scp
Il comando copia tutte le sottocartelle e i file all'interno della directory dalla macchina locale al sistema remoto.
Visualizzazione di informazioni dettagliate sul processo scp
Puoi usare il -v
(minuscolo v
) per visualizzare le informazioni sui file che vengono copiati su un sistema remoto o locale. Questo tipo di output è anche chiamato output dettagliato.
Quando si utilizza questa opzione, sullo schermo vengono visualizzate le informazioni di debug complete sul file.
Sintassi generale:
scp -v [nome_file] nome_utente@host_utente:
Esempio:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Produzione:
gaurav@ubuntu:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team Esecuzione: programma /usr/bin/ssh host 159.89.170.11, utente root, comando scp -v -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 dicembre 2017 debug1: lettura dei dati di configurazione /home/gaurav/.ssh/config debug1: lettura dei dati di configurazione /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config riga 19: applicazione delle opzioni per * debug1: connessione alla porta 159.89.170.11 [159.89.170.11] porta 22. debug1: connessione stabilita. debug1: key_load_public: nessun file o directory di questo tipo debug1: file di identità /home/gaurav/.ssh/id_rsa type -1 apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36 debug1: client_input_channel_req: canale 0 rtype stato-uscita risposta 0 debug1: canale 0: libero: sessione-cliente, nchannels 1 debug1: fd 0 azzeramento O_NONBLOCK debug1: fd 1 azzeramento O_NONBLOCK Trasferito: inviato 9826736, ricevuto 4016 byte, in 97.2 secondi Byte al secondo: inviato 101133.9, ricevuto 41.3 debug1: stato di uscita 0 gaurav@ubuntu:~$
Qui, nell'output, puoi vedere che le informazioni di debug del file vengono visualizzate sul tuo terminale quando il scp
comando viene utilizzato con il -v
opzione.
Trasferimento di file tra due host remoti
Linux ti consente di connetterti a più host remoti. È possibile trasferire file e directory tra due host remoti utilizzando il scp
comando.
Sintassi generale:
scp utente_remoto_1@host_1:/[nome_file] utente_remoto_2@host_2:[cartella_da_salvare]
La sintassi può sembrare un po' più ampia ma è piuttosto semplice. Qui, la prima parte del comando fornisce l'input sull'utente remoto da cui deve essere copiato il file. due punti (:) e /
viene utilizzato per specificare il nome del file o il nome della directory che deve essere trasferito tra le due macchine remote.
La seconda parte fornisce informazioni sul sistema remoto di destinazione in cui deve essere copiato il file.
Esempio:
scp -r [email protected]:gaurav [email protected]:/team
Qui, copieremo una directory denominata "gaurav" in modo ricorsivo dal sistema locale a un sistema remoto. Il file verrà copiato in una cartella "team" sul sistema remoto.
Produzione:
gaurav@ubuntu:~$ scp -r [email protected]:/gaurav [email protected]:/team [email protected] password di: 1.py 100% 134 261.3KB/s 00:00 variabili.py 100% 377 949.2 KB/s 00:00 abc.txt 100% 0 0,0 KB/s 00:00 ath.html 100% 199 KB 41,8 MB/s 00:00 gaurav@ubuntu:~$
Qui, abbiamo usato il scp
comando sul sistema locale per trasferire una directory denominata "gaurav" da un server remoto a un altro.
Trasferisci file dal sistema remoto al tuo sistema locale
È possibile trasferire facilmente i file o le directory dal sistema remoto al sistema locale utilizzando il scp
comando. In parole più semplici, puoi scaricare più file o directory dal server remoto sul tuo sistema locale usando il scp
comando.
Sintassi generale:
scp nomeutente_remoto@host_utente:/files/file.txt /[cartella_del_sistema_locale]
Produzione:
gaurav@ubuntu:~$ scp [email protected]:how.txt . password di [email protected]: how.txt 100% 11 0.1KB/s 00:00 gaurav@ubuntu:~$
Qui, ho scaricato (copiato) il file dal server remoto nella mia home directory. Quindi, ho usato punto (.
) per specificare nel comando di copiare il file nella mia home directory.
Uscita campione:
gaurav@ubuntu:~$ ls -l how.txt -rw-r--r-- 1 gaurav gaurav 11 6 ottobre 09:49 how.txt gaurav@ubuntu:~$
Qui, il file è ora copiato nella mia home directory dal server remoto.
Allo stesso modo, puoi scaricare più file o directory dal server remoto usando il scp
comando con le opzioni appropriate.
Comprimere i file per effettuare trasferimenti più veloci
A volte, il trasferimento di file di grandi dimensioni può richiedere molto tempo. Questo problema può essere risolto utilizzando il scp
comando con il -C
(maiuscolo C
) opzione.
Usando il -C
opzione, comprime i file di dimensioni maggiori che facilita un trasferimento più veloce e quindi consente di risparmiare tempo.
Un fatto interessante di questa opzione è che il file viene copiato con la sua dimensione originale sul sistema di destinazione, ma durante il processo di trasferimento, la dimensione viene compressa per consentire un trasferimento più veloce. Pertanto, la compressione viene eseguita solo sulla rete.
Sintassi generale:
scp -C [nome_file] nome_utente@host_utente:[cartella_destinazione]
Vediamo un esempio comparativo per capire la differenza.
Trasferimento senza opzione -C:
gaurav@ubuntu:~$ scp -rv dlink [email protected]:team Esecuzione: programma /usr/bin/ssh host 68.183.82.183, utente root, comando scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 dicembre 2017 debug1: lettura dei dati di configurazione /home/trinity/.ssh/config debug1: lettura dei dati di configurazione /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config riga 19: applicazione delle opzioni per * debug1 : Connessione alla porta 68.183.82.183 [68.183.82.183] 22. debug1: Connessione stabilita. debug1: client_input_channel_req: canale 0 rtype exit-status risposta 0 debug1: canale 0: libero: client-session, nchannels 1 debug1: fd 0 azzeramento O_NONBLOCK debug1: fd 1 azzeramento O_NONBLOCK Trasferito: inviato 7516504, ricevuto 4008 byte, in 74.6 secondi Byte al secondo: inviato 100693.7, ricevuto 53.7 debug1: stato di uscita 0 gaurav@ubuntu:~$
Da quanto sopra, dall'output possiamo vedere che il tempo necessario per il trasferimento è di 74,6 secondi. Cercheremo di trasferire lo stesso file usando l'opzione -C e osserveremo la differenza.
Trasferimento con opzione -C:
gaurav@ubuntu:~$ scp -Crv dlink [email protected]:team Esecuzione: programma /usr/bin/ssh host 68.183.82.183, utente root, comando scp -v -r -t team OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 dicembre 2017 debug1: lettura dei dati di configurazione /home/trinity/.ssh/config debug1: lettura dei dati di configurazione /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config riga 19: applicazione delle opzioni per * debug1 : Connessione alla porta 68.183.82.183 [68.183.82.183] 22. debug1: Connessione stabilita. . . webupload.img 100% 1834KB 98,7KB/s 00:18 Modalità di invio file: C0664 1877552 router.img Sink: C0664 1877552 router.img router.img 100% 1834KB 100.3KB/s 00:18 Sink: E Modalità di invio file: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB/s 00:16 Sink: E debug1: client_input_channel_req: canale 0 rtype exit-status risposta 0 debug1: canale 0: libero: client-session, nchannels 1 debug1: fd 0 cancellazione O_NONBLOCK debug1: fd 1 cancellazione O_NONBLOCK Trasferito: inviato 7518864, ricevuto 3828 byte, in 51,0 secondi Byte al secondo: inviato 100245.4, ricevuto 51.0 debug1: stato di uscita 0 debug1: compressione in uscita: dati non elaborati 7511925, compresso 7513136, fattore 1.00 debug1: compressione in ingresso: dati non elaborati 1467, compresso 999, fattore 0,68 gaurav@ubuntu:~$
Qui, possiamo facilmente osservare che usando il -C
opzione con il scp
Il comando ci ha permesso di comprimere il file in rete dimostrando così di essere un'opzione per risparmiare tempo.
Utilizzo di una porta ssh diversa per il trasferimento di file
Durante l'utilizzo del scp
comando la porta predefinita che viene distribuita è la porta 22
. L'utente ha la libertà di personalizzare questa scelta di porta. Puoi usare il -P
(opzione P maiuscola) con il scp
comando per utilizzare la porta di tua scelta.
Sintassi generale:
cp -P [nuovo_numero_porta] [nome_file/nome_directory] utente_remoto@host:[cartella_destinazione]
Esempio:
scp -P 4248 dlink [email protected]:team
Utilizzando il comando sopra, il file verrà trasferito al server remoto. Ma questa volta, la porta utilizzata sarà porta 4248
invece dell'impostazione predefinita porta 22
.
Conclusione
Dopo aver seguito questo tutorial, abbiamo appreso la natura dinamica del scp
comando utilizzato per trasferire o copiare file da un sistema a un altro. Questa opzione può essere utilizzata anche per scaricare file o directory dal server remoto. Possiamo quindi concludere che scp
comando si rivela molto utile per i trasferimenti di file quando devi gestire più di un sistema e server remoti contemporaneamente.