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, 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, l'utilizzo scp
diventa possibile.
Puoi fare molto affidamento sul 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 del scp
comando. Vedremo anche alcune delle opzioni usate 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 [Option] [source_file_name] [[email protected]_Host]:destination_folder
Cerchiamo di capire gli attributi di base di questo comando uno per uno.
- [source_file_name] Questo è il file sorgente che vuoi copiare.
- [ [email protected] _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 ' '.
- [ cartella_destinazione ] Questa è la directory in cui si desidera salvare il file copiato.
Nota: il :
simbolo dei due punti ( ) 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 elencate 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 dei file |
-P |
cambia la porta predefinita usata dal scp comando |
Opzioni usate di frequente con il comando scp
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 [file_name] [email protected]:[destination_folder]
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:
[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password:
apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB/s 02:00
[email protected]:~$
Controlliamo l'output sul sistema remoto per il file.
[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#
Pertanto, il file viene copiato correttamente 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 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] [email protected]_host:[specific directory]
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:
[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
[email protected]'s password:
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
[email protected]:~$
Sul sistema remoto:
[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html
-rw-r--r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#
Tutti e tre i file vengono ora copiati sul sistema remoto.
Copiare una directory nel sistema remoto
Puoi usare il scp
comando per copiare una directory dal tuo sistema locale al sistema remoto. Il processo è simile a quello della copia di un file. Per copiare anche il contenuto della directory, puoi utilizzare l' -r
opzione con il scp
comando.
L' -r
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 [directory path] [email protected]_host:[target_directory]
Esempio:
scp -r PycharmProjects [email protected]:gaurav
Produzione:
[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password:
__main__.py 100% 623 7.8KB/s 00:00
__init__.py 100% 23 0.4KB/s 00:00
completion.py 100% 2929 28.1KB/s 00:00
search.py 100% 4728 38.7KB/s 00:00
uninstall.py 100% 2963 32.5KB/s 00:00
hash.py 100% 1681 21.3KB/s 00:00
check.py 100% 1430 16.8KB/s 00:00
configuration.py 100% 7125 50.4KB/s 00:00
show.py 100% 6289 49.8KB/s 00:00
download.py 100% 6623 48.2KB/s 00:00
[email protected]:~$
L'utilizzo -r
dell'opzione con il scp
comando copia tutte le sottocartelle ei file all'interno della directory dalla macchina locale al sistema remoto.
Visualizzazione di informazioni dettagliate sul processo scp
È possibile utilizzare l' opzione -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 [file_name] [email protected]_host:
Esempio:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Produzione:
[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /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: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$
Qui, nell'output, puoi vedere che le informazioni di debug del file vengono visualizzate sul tuo terminale quando il scp
comando viene utilizzato con l' -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 [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]
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 chiamata 'gaurav' in modo ricorsivo dal sistema locale a un sistema remoto. Il file verrà copiato in una cartella 'team' sul sistema remoto.
Produzione:
[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team
[email protected]'s password:
1.py 100% 134 261.3KB/s 00:00
variables.py 100% 377 949.2KB/s 00:00
abc.txt 100% 0 0.0KB/s 00:00
ath.html 100% 199KB 41.8MB/s 00:00
[email protected]:~$
Qui, abbiamo usato il scp
comando sul sistema locale per trasferire una directory chiamata '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 [email protected]_host:/files/file.txt /[folder_of_local_system]
Produzione:
[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password:
how.txt 100% 11 0.1KB/s 00:00
[email protected]:~$
Qui, ho scaricato (copiato) il file dal server remoto nella mia home directory. Quindi, ho usato il punto ( .
) per specificare nel comando di copiare il file nella mia directory home.
Uscita campione:
[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt
[email protected]:~$
Qui, il file è ora copiato nella mia home directory dal server remoto.
Allo stesso modo, puoi scaricare più file o directory dal server remoto utilizzando 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 l' opzione -C
(maiuscolo C
).
Utilizzando l' -C
opzione, comprime i file di dimensioni maggiori che facilita un trasferimento più veloce e quindi fa 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 [file_name] [email protected]_host:[target_folder]
Vediamo un esempio comparativo per capire la differenza.
Trasferimento senza opzione -C:
[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$
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:
[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img 100% 1834KB 98.7KB/s 00:18
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img 100% 1834KB 100.3KB/s 00:18
Sink: E
Sending file modes: 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: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$
Qui possiamo facilmente osservare che l'utilizzo -C
dell'opzione con il scp
comando ci ha permesso di comprimere il file in rete rivelandosi così 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 distribuita è port 22
. L'utente ha la libertà di personalizzare questa scelta di porta. Puoi usare l' -P
opzione (opzione P maiuscola) con il scp
comando per usare la porta che preferisci.
Sintassi generale:
cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]
Esempio:
scp -P 4248 dlink [email protected]:team
Utilizzando il comando precedente, il file verrà trasferito al server remoto. Ma questa volta, la porta utilizzata sarà port 4248
invece di quella predefinita port 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. Pertanto, possiamo concludere che il scp
comando si rivela molto utile per i trasferimenti di file quando devi gestire più di un sistema e server remoti contemporaneamente.