comando scp – Secure copy

Scp (Secure Copy) è uno strumento a riga di comando per copiare o trasferire file tra host. Usa lo stesso tipo di meccanismo di sicurezza del programma ssh.

Infatti usa una connessione ssh in background per eseguire il trasferimento dei file. scp si riferisce sia al “protocollo” che definisce come dovrebbe funzionare la copia sicura sia al “programma” (comando) che è installato come parte della suite di strumenti OpenSSH.

In questo rapido tutorial vedremo alcuni esempi del comando scp e come può essere usato per trasferire file in modo sicuro.

Come installare scp

Scp è generalmente installato di default sulla maggior parte delle distro linux come parte dei pacchetti openssh. Su ubuntu/debian per esempio, il pacchetto openssh-client fornisce il programma scp.

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

È il pacchetto OpenSSH che fornisce i programmi ssh, scp, sftp insieme a molti altri strumenti. Quindi non dobbiamo fare nulla di extra qui, eccetto usare e imparare il programma.

Usare scp – sintassi di base

La sintassi di base di scp è molto semplice da memorizzare. Si presenta così

$ scp source_file_path destination_file_path

A seconda dell’host, il percorso del file dovrebbe includere l’indirizzo completo dell’host, il numero di porta, il nome utente e la password insieme al percorso della directory.

Quindi, se state “inviando” un file dalla vostra macchina locale a una macchina remota (upload), la sintassi sarà simile a questa

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

Quando copiate un file da un host remoto a un host locale (download), sarà esattamente il contrario

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

Questo è più o meno l’uso di scp per compiti regolari. A parte questo, ci sono un paio di opzioni e funzioni extra che scp supporta. Facciamo una rapida panoramica di queste.

E sì, per default scp sovrascrive sempre i file sulla destinazione. Se hai bisogno di evitarlo, usa uno strumento più potente chiamato rsync.

esempi di comando scp

1. Output verboso

Con l’output verboso, il programma scp produrrebbe molte informazioni su ciò che fa in background. Questo è spesso utile quando il programma fallisce o non è in grado di completare la richiesta. L’output verboso indicherebbe quindi il punto esatto in cui il programma ha avuto problemi.

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

L’output sarebbe grande e conterrebbe informazioni dettagliate su come viene effettuata la connessione, quali file di configurazione e identità vengono utilizzati e così via.

2. Trasferire più file

I file multipli possono essere specificati separati da uno spazio come questo

$ scp foo.txt bar.txt :/path/directory/

Per copiare più file dall’host remoto alla directory locale corrente

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3. Copiare un’intera directory (ricorsivamente)

Per copiare un’intera directory da un host ad un altro usate l’interruttore r e specificate la directory

$ scp -v -r ~/Downloads :/root/Downloads

4. Copiare file attraverso 2 host remoti

Scp può copiare file da 1 host remoto ad un altro host remoto.

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5. Accelerare il trasferimento con la compressione

Un’opzione super cool per accelerare il trasferimento e risparmiare tempo e banda. Tutto quello che dovete fare è usare l’opzione C per abilitare la compressione. I file vengono compressi al volo e decompressi sulla destinazione.

$ scp -vrC ~/Downloads :/root/Downloads

Nell’esempio precedente abbiamo spostato l’intera directory con la compressione abilitata. Il guadagno di velocità dipende da quanto i file possono essere compressi.

6. Limitare l’uso della larghezza di banda

Se non volete che scp occupi tutta la larghezza di banda disponibile, allora usate l’opzione l per limitare la velocità massima in Kbit/s.

$ scp -vrC -l 400 ~/Downloads :/root/Downloads

7. Connettersi a un numero di porta diverso sull’host remoto

Se il server remoto ha un demone ssh che gira su una porta diversa (l’impostazione predefinita è 22), allora devi dire a scp di usare quel particolare numero di porta usando l’opzione ‘-P’.

$ scp -vC -P 2200 ~/test.txt :/some/path/test.txt

8. Preservare gli attributi del file

L’opzione ‘-p’ (minuscola), preserva i tempi di modifica, i tempi di accesso e le modalità del file originale.

$ scp -C -p ~/test.txt :/some/path/test.txt

9. Quiet mode

In quiet mode (opzione ‘-q’), l’output scp verrebbe soppresso, e disabiliterebbe l’indicatore di progresso così come i messaggi di avviso e diagnostici.

$ scp -vCq ~/test.txt :/some/path/test.txt

10. Specificare il file di identità

Quando si usa l’autenticazione basata sulla chiave (senza password), è necessario specificare il file di identità che contiene la chiave privata. Questa opzione viene passata direttamente al comando ssh e funziona allo stesso modo.

$ scp -vCq -i private_key.pem ~/test.txt :/some/path/test.txt

11. Use a different ssh_config file

Utilizza l’opzione ‘-F’ per specificare un diverso file ssh_config.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. Usa un cifrario diverso

Scp per default usa il cifrario/crittografia AES. A volte potresti voler usare un cifrario diverso. Usare un cifrario diverso può accelerare il processo di trasferimento. Per esempio blowfish e arcfour sono noti per essere più veloci di AES (ma meno sicuri).

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

Nell’esempio precedente usiamo il cifrario blowfish insieme alla compressione. Questo può dare un significativo aumento di velocità a seconda della larghezza di banda disponibile.

Sommario

Anche se scp è molto efficiente nel trasferire file in modo sicuro, manca delle caratteristiche necessarie di uno strumento di sincronizzazione di file. Tutto quello che può fare è copiare e incollare tutti i file menzionati da una posizione all’altra.

Uno strumento più potente è Rsync che non solo ha tutte le funzioni di scp ma aggiunge più caratteristiche per sincronizzare in modo intelligente i file tra 2 host. Per esempio, può controllare e caricare solo i file modificati, ignorare i file esistenti e così via.