Gli amministratori di Linux dovrebbero essere familiari con l’ambiente a riga di comando. Poiché GUI (Interfaccia utente grafica) nei server Linux non è comune essere installati.
SSH potrebbe essere il protocollo più popolare per consentire agli amministratori di Linux di gestire i server in modo remoto e sicuro. Integrata con il comando SSH c’è il comando SCP, che viene utilizzato per copiare file(s) tra server in modo sicuro.
Sintassi di Base del Comando SCP
Il comando seguente sarà letto come copiare “nome_file_origine” in “cartella_destinazione” su “host_destinazione” utilizzando l’account “username“.
scp source_file_name username@destination_host:destination_folder
Ci sono molti parametri nel comando SCP che puoi utilizzare. Ecco i parametri che potresti utilizzare quotidianamente.
Indice
Trasferire File in Modo Sicuro in Linux
Il comando SCP di base senza parametri copia i file in background. Gli utenti non vedranno nulla a meno che il processo non sia completato o non appaia qualche errore.
È possibile utilizzare il parametro ” -v
” per stampare informazioni di debug sullo schermo. Può aiutarti a risolvere problemi di connessione, autenticazione e configurazione.
Copiare File dall’Host Locale al Server Remoto
Il seguente comando copia un file “scp-cheatsheet.pdf” da un sistema locale a un sistema Linux remoto nella directory /home/tecmint.
$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Output di esempio:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/. OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_xmss type -1 ...
Copia di file da host remoto a host locale
Il seguente comando copia un file “ssh-cheatsheet.pdf” da un host remoto a un sistema locale nella directory /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Output di esempio:
Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files debug1: /etc/ssh/ssh_config line 21: Applying options for * debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22. debug1: Connection established. debug1: identity file /home/tecmint/.ssh/id_rsa type -1 debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_dsa type -1 debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1 debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1 debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1 ...
Copia di file da host remoto a un altro host
Il seguente comando copia un file “ssh-cheatsheet.pdf” da un host remoto a un altro sistema remoto nella directory /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.
Copia di file con data e ora di creazione originale
Il parametro “-p
” preserverà le date e le ore originali di modifica e accesso dei file durante la copia dei file, insieme al tempo stimato e alla velocità di connessione che appariranno sullo schermo.
$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Output di esempio:
[email protected]'s password: scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Compressione SCP durante la copia di file
Uno dei parametri che può accelerare il trasferimento dei tuoi file è il parametro “-C
“, che viene utilizzato per comprimere i tuoi file durante il trasferimento. La cosa unica è che la compressione avviene solo nella rete. Quando il file è arrivato al server di destinazione, tornerà alle dimensioni originali prima che la compressione sia avvenuta.
Dai un’occhiata a questi comandi. Si tratta di un singolo file di 93 Mb.
$ scp -pv messages.log [email protected]:.
Output di esempio:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: Sending command: scp -v -p -t. File mtime 1323853868 atime 1380425711 Sending file timestamps: T1323853868 0 1380425711 0 messages.log 100% 93MB 58.6KB/s 27:05 Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds Bytes per second: sent 58758.4, received 15.6 debug1: Exit status 0
Copiare i file senza il parametro “-C
” risulterà in 1661,3 secondi. Puoi confrontare il risultato con il comando sottostante che utilizza il parametro “-C"
.
$ scp -Cpv messages.log [email protected]:.
Output di esempio:
Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t. OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to 202.x.x.x [202.x.x.x] port 22. debug1: Connection established. debug1: identity file /home/pungki/.ssh/id_rsa type -1 debug1: Host '202.x.x.x' is known and matches the RSA host key. debug1: Found key in /home/pungki/.ssh/known_hosts:1 debug1: ssh_rsa_verify: signature correct debug1: Next authentication method: publickey debug1: Trying private key: /home/pungki/.ssh/id_rsa debug1: Next authentication method: password [email protected]'s password: debug1: Enabling compression at level 6. debug1: Authentication succeeded (password). Authenticated to 202.x.x.x ([202.x.x.x]:22). debug1: channel 0: new [client-session] debug1: Sending command: scp -v -p -t . File mtime 1323853868 atime 1380428748 Sending file timestamps: T1323853868 0 1380428748 0 Sink: T1323853868 0 1380428748 0 Sending file modes: C0600 97517300 messages.log messages.log 100% 93MB 602.7KB/s 02:38 Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds Bytes per second: sent 54813.9, received 97.0 debug1: Exit status 0 debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09 debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48
Come puoi vedere, quando utilizzi la compressione, il processo di trasferimento viene completato in 162,5 secondi. È 10 volte più veloce rispetto all’utilizzo del parametro “-C
“. Se stai copiando molti file attraverso la rete, il parametro “-C
” ti aiuterà a ridurre il tempo totale necessario.
La cosa che dobbiamo notare è che il metodo di compressione non funzionerà su tutti i file. Quando il file sorgente è già compresso, non troverai alcun miglioramento lì. File come .zip, .rar, immagini e .iso non saranno influenzati dal parametro “-C
“.
Cambia il cifrario SCP per crittografare i file
Per impostazione predefinita, SCP utilizza “AES-128” per crittografare i file. Se desideri cambiare in un altro cifrario per crittografarlo, puoi utilizzare il parametro “-c
“.
Dai un’occhiata a questo comando.
$ scp -c 3des Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Il comando precedente indica a SCP di utilizzare l’algoritmo 3des per crittografare il file. Si prega di notare che questo parametro utilizzando “-c
” non è “-C
“.
Limitare l’uso della larghezza di banda con il comando SCP
Un altro parametro che potrebbe essere utile è il parametro “-l
“. Il parametro “-l” limiterà la larghezza di banda da utilizzare. Sarà utile se stai creando uno script di automazione per copiare molti file, ma non vuoi che la larghezza di banda venga assorbita dal processo SCP.
$ scp -l 400 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 50.3KB/s 01:13
Il valore 400 dietro il parametro “-l
” significa che limitiamo la larghezza di banda per il processo SCP a solo 50 KB/sec.
Una cosa da ricordare è che la larghezza di banda è specificata in Kilobit/sec (kbps). Significa che 8 bit equivalgono a 1 byte.
Mentre SCP conta in Kilobyte/sec (KB/s). Quindi, se vuoi limitare la tua larghezza di banda a un SCP massimo di solo 50 KB/s, devi impostarlo su 50 x 8 = 400.
SCP con una Porta Diversa
Di solito, SCP utilizza la porta 22 come porta predefinita, ma per motivi di sicurezza, potresti cambiare la porta con un’altra porta. Ad esempio, stiamo utilizzando la porta 2249.
Quindi il comando dovrebbe essere simile a questo.
$ scp -P 2249 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 262.3KB/s 00:14
Assicurati che utilizzi una “P” maiuscola e non una “p” minuscola, poiché “p” è già utilizzato per tempi e modalità preservati.
SCP – Copiare File e Directory in Modo Ricorsivo
A volte abbiamo bisogno di copiare la directory e tutti i file/directory al suo interno. Sarà meglio se possiamo farlo in un singolo comando utilizzando il parametro “r”, che copia l’intera directory in modo ricorsivo.
$ scp -r documents [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
Quando il processo di copia è completato, nel server di destinazione troverai una directory chiamata “documents” con tutti i suoi file. La cartella “documents” viene creata automaticamente.
SCP – Disabilitare i Messaggi di Progresso
Se si decide di non visualizzare il contatore di avanzamento e i messaggi di avviso/diagnostica da SCP, è possibile disabilitarlo utilizzando il parametro “-q
“. Ecco un esempio.
$ scp -q Label.pdf [email protected]:. [email protected]'s password: pungki@mint ~/Documents $
Come si può vedere, dopo aver inserito la password, non viene fornita alcuna informazione sul processo SCP. Al termine del processo, verrà visualizzato nuovamente un prompt.
SCP – Copiare File Utilizzando Proxy
Il server proxy viene solitamente utilizzato in un ambiente aziendale. In modo nativo, SCP non è configurato per un proxy. Quando si utilizza un proxy nel proprio ambiente, è necessario ” dire” a SCP di comunicare con il proxy.
Ecco la situazione. L’indirizzo proxy è 10.0.96.6 e la porta proxy è 8080. Il proxy implementa anche l’autenticazione dell’utente. Innanzitutto, è necessario creare il file “~/.ssh/config”. In secondo luogo, inserire questo comando al suo interno.
ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth
Quindi è necessario creare il file “~/.ssh/proxyauth” che contiene.
myusername:mypassword
Dopodiché, è possibile utilizzare SCP in modo trasparente come al solito.
Si prega di notare che il corkscrew potrebbe non essere installato ancora nel sistema. Nel mio Linux Mint, ho dovuto installarlo per primo, utilizzando la procedura di installazione standard di Linux Mint.
$ apt-get install corkscrew
Per altri sistemi basati su yum, gli utenti possono installare corkscrew utilizzando il seguente comando yum.
# yum install corkscrew
Un’altra cosa è che poiché il file “~/.ssh/proxyauth” contiene il tuo “nome utente” e “password” in formato testo normale, assicurati che il file sia accessibile solo a te.
Scegli un File ssh_config Diverso
Per gli utenti mobili che spesso passano tra le reti aziendali e le reti pubbliche, sarà una sofferenza cambiare sempre le impostazioni in SCP. È meglio se possiamo mettere un diverso file ssh_config per soddisfare le nostre esigenze.
Il proxy viene utilizzato nella rete aziendale ma non nella rete pubblica e cambi regolarmente reti.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Per impostazione predefinita, il file “ssh_config” per ogni utente sarà posizionato in “~/.ssh/config“. Creare un file “ssh_config” specifico con compatibilità proxy renderà più facile passare tra le reti.
Quando sei nella rete aziendale, puoi utilizzare il parametro “-F
“. Quando sei su una rete pubblica, puoi omettere il parametro “-F
“.
Questo è tutto riguardo SCP. Puoi consultare le pagine di manuale di SCP per ulteriori dettagli. Non esitare a lasciare commenti e suggerimenti.