Ricerca nel sito web

Comando SCP Linux: trasferisci in modo sicuro i file in Linux


Gli amministratori Linux dovrebbero avere familiarità con l'ambiente della riga di comando. Poiché la modalità GUI (Graphical User Interface) nei server Linux non è comune da installare.

SSH potrebbe essere il protocollo più popolare per consentire agli amministratori Linux di gestire i server in modo remoto sicuro. Integrato con il comando SSH c'è il comando SCP, che viene utilizzato per copiare file tra server in modo sicuro.

Sintassi di base del comando SCP

Il comando seguente verrà letto come copia "nome_file_origine" in "cartella_destinazione" in "host_destinazione" utilizzando il "nome utente " account.

scp source_file_name username@destination_host:destination_folder

Ci sono molti parametri nel comando SCP che puoi utilizzare. Ecco i parametri che possono essere utilizzati nell'utilizzo quotidiano.

Trasferisci file in modo sicuro in Linux

Il comando di base SCP senza parametri copierà i file in background. Gli utenti non vedranno nulla a meno che il processo non venga completato o venga visualizzato qualche errore.

È possibile utilizzare il parametro "-v" per stampare informazioni di debug sullo schermo. Può aiutarti a eseguire il debug di problemi di connessione, autenticazione e configurazione.

Copia file dall'host locale al server remoto

Il comando seguente copia un file "scp-cheatsheet.pdf" da un sistema Linux locale a uno remoto nella directory /home/tecmint.

scp -v scp-cheatsheet.pdf [email :/home/tecmint/.

Esempio di output:

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 file dall'host remoto all'host locale

Il comando seguente copia un file "ssh-cheatsheet.pdf" da un host remoto a un sistema locale nella directory /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.

Esempio di output:

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 file da host remoto a un altro host

Il comando seguente copia un file "ssh-cheatsheet.pdf" da un host remoto a un altro sistema host remoto nella directory /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf [email :/home/anusha/.

Copia file con data e ora di creazione originali

Il parametro "-p" conserverà la modifica originale dei file e i tempi di accesso durante la copia dei file insieme al tempo stimato e alla velocità di connessione verranno visualizzati sullo schermo.

scp -p scp-cheatsheet.pdf [email :/home/tecmint/.

Esempio di output:

[email 's password: 
scp-cheatsheet.pdf                                                                                                                                                                 100%  531   721.4KB/s   00:00    

Compressione Scp durante la copia dei file

Uno dei parametri che possono velocizzare il trasferimento dei file è il parametro "-C", che viene utilizzato per comprimere i file mentre sei in movimento. La cosa unica è che la compressione avviene solo nella rete. Quando il file è arrivato al server di destinazione, tornerà alla dimensione originale come prima della compressione.

Dai un'occhiata a questi comandi. Utilizza un singolo file di 93 Mb.

scp -pv messages.log [email :.

Esempio di output:

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 '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

La copia di file senza il parametro "-C" comporterà 1661,3 secondi. Puoi confrontare il risultato con il comando seguente utilizzando il parametro "-C".

scp -Cpv messages.log [email :.

Esempio di output:

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 '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 eseguito in 162,5 secondi. È 10 volte più veloce rispetto a non utilizzare il parametro “-C”. Se stai copiando molti file sulla rete, il parametro "-C" ti aiuterà a ridurre il tempo totale necessario.

La cosa che dovremmo notare è che il metodo di compressione non funzionerà su nessun file. Quando il file sorgente è già compresso, non troverai alcun miglioramento. File come .zip, .rar, immagini e .iso non saranno interessati dal " -C”.

Cambia la crittografia SCP per crittografare i file

Per impostazione predefinita, SCP utilizza "AES-128" per crittografare i file. Se vuoi passare a un altro codice per crittografarlo, puoi utilizzare il parametro "-c".

Dai un'occhiata a questo comando.

scp -c 3des Label.pdf [email :.

[email '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. Fare attenzione che questo parametro utilizzi “-c” e non “-C“.

Limitazione dell'utilizzo della larghezza di banda con il comando SCP

Un altro parametro che può essere utile è il parametro “-l”. Il parametro "-l" limiterà la larghezza di banda da utilizzare. Sarà utile se esegui uno script di automazione per copiare molti file, ma non vuoi che la larghezza di banda venga prosciugata dal processo SCP.

scp -l 400 Label.pdf [email :.

[email '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 soli 50 KB/ sez.

Una cosa da ricordare è che la larghezza di banda è specificata in Kilobit/sec (kbps). Ciò significa che 8 bit equivalgono a 1 byte.

Mentre SCP conta in Kilobyte/sec (KB/s). Pertanto, se desideri limitare la larghezza di banda a un massimo SCP di soli 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 è possibile modificare la porta con un'altra porta. Ad esempio, stiamo utilizzando la porta 2249.

Quindi il comando dovrebbe essere così.

scp -P 2249 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Assicurati che utilizzi la "P" maiuscola e non la "p" poiché "p" è già utilizzata per tempi e modalità conservati.

SCP – Copia ricorsivamente di file e directory

A volte è necessario copiare la directory e tutti i file/directory al suo interno. Sarebbe meglio se potessimo farlo in un unico comando usando il parametro “-r”, che copia ricorsivamente l'intera directory.

scp -r documents [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Una volta terminato il processo di copia, sul server di destinazione troverai una directory denominata "documenti" con tutti i suoi file. La cartella "documenti" viene creata automaticamente.

SCP – Disattiva messaggi di avanzamento

Se scegli di non visualizzare l'indicatore di avanzamento e i messaggi di avviso/diagnostici di SCP, puoi disabilitarlo utilizzando il parametro "-q". Ecco un esempio.

scp -q Label.pdf [email :.

[email 's password:
pungki@mint ~/Documents $

Come puoi vedere, dopo aver inserito la password, non ci sono informazioni sul processo SCP. Una volta completato il processo, vedrai nuovamente un messaggio.

SCP – Copia file utilizzando proxy

Il server proxy viene solitamente utilizzato in ambiente d'ufficio. Nativamente, SCP non è un proxy configurato. Quando il tuo ambiente utilizza un proxy, devi "dire" a SCP di comunicare con il proxy.

Ecco lo scenario. L'indirizzo proxy è 10.0.96.6 e la porta proxy è 8080. Il proxy ha implementato anche l'autenticazione dell'utente. Per prima cosa devi creare il file “~/.ssh/config”. Secondo, inserisci 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

Successivamente, puoi eseguire SCP in modo trasparente come al solito.

Tieni presente che il cavatappi potrebbe non essere ancora installato sul tuo sistema. Sul mio Linux Mint, devo prima installarlo, utilizzando la procedura di installazione standard di Linux Mint.

apt-get install corkscrew

Per altri sistemi basati su yum, gli utenti possono installare il cavatappi 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 non crittografato , assicurati che solo tu possa accedere al file.

Scegli un file ssh_config diverso

Per gli utenti mobili che passano spesso dalla rete aziendale a quella pubblica sarà difficile modificare sempre le impostazioni in SCP. È meglio se possiamo inserire un file ssh_config diverso per soddisfare le nostre esigenze.

Il proxy viene utilizzato nella rete aziendale ma non nella rete pubblica e si cambia rete regolarmente.

scp -F /home/pungki/proxy_ssh_config Label.pdf

[email :.
[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

Per impostazione predefinita, il file "ssh_config" per utente verrà inserito in "~/.ssh/config". La creazione di un file "ssh_config" specifico con compatibilità proxy renderà più semplice il passaggio da una rete all'altra.

Quando sei nella rete aziendale puoi utilizzare il parametro “-F”. Quando sei su una rete pubblica, puoi saltare il parametro "-F".

Tutto ruota attorno all'SCP. Puoi vedere le pagine man di SCP per maggiori dettagli. Non esitate a lasciare commenti e suggerimenti.