scp-kommando – Sikker kopi

Scp (Secure Copy) er et kommandolinjeværktøj til at kopiere eller overføre filer på tværs af værter. Det bruger den samme slags sikkerhedsmekanisme som ssh-programmet.

Faktisk set bruger den en ssh-forbindelse i baggrunden til at udføre filoverførslen. scp henviser både til “protokollen”, der definerer, hvordan secure copy skal fungere, og til “programmet” (kommandoen), der er installeret som en del af OpenSSH-suite af værktøjer.

I denne hurtige vejledning vil vi se på et par eksempler scp-kommandoen, og hvordan den kan bruges til at overføre filer sikkert.

Sådan installerer du scp

Scp er generelt installeret som standard på de fleste linux-distroer som en del af openssh-pakker. På ubuntu/debian for eksempel leverer openssh-client-pakken scp-programmet.

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

Det er OpenSSH-pakken, der leverer ssh-, scp- og sftp-programmerne sammen med mange andre værktøjer. Så vi behøver ikke at gøre noget ekstra herinde, udover at bruge og lære programmet.

Brug af scp – grundlæggende syntaks

Den grundlæggende syntaks for scp er meget enkel at huske. Den ser således ud

$ scp source_file_path destination_file_path

Afhængigt af værten skal filstien indeholde den fulde værtsadresse, portnummer, brugernavn og adgangskode sammen med mappestien.

Så hvis du “sender” fil fra din lokale maskine til en fjernmaskine (uploading), ser syntaksen således ud

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

Hvis du kopierer fil fra fjernvært til lokalvært (downloading), ser det lige omvendt ud

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

Det er stort set det samme som at bruge scp til almindelige opgaver. Udover det er der et par ekstra muligheder og funktioner, som scp understøtter. Lad os tage et hurtigt overblik over disse.

Og ja, som standard vil scp altid overskrive filer på destinationen. Hvis du har brug for at undgå det, skal du bruge et mere kraftfuldt værktøj kaldet rsync.

scp-kommandoeksempler

1. Verbose output

Med verbose output ville scp-programmet udsende masser af oplysninger om, hvad det gør i baggrunden. Dette er ofte nyttigt, når programmet fejler eller ikke er i stand til at fuldføre anmodningen. Verbose output ville så angive det nøjagtige punkt, hvor programmet løb ind i problemer.

$ 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

Opdatet ville være stort og indeholde detaljerede oplysninger om, hvordan forbindelsen er oprettet, hvilke konfigurations- og identitetsfiler der bruges osv.

2. Overfør flere filer

Flere filer kan angives adskilt af et mellemrum som her

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

For at kopiere flere filer fra fjernværten til den aktuelle lokale mappe

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

3. Kopier hele mappen (rekursivt)

For at kopiere en hel mappe fra en vært til en anden skal du bruge r-switchen og angive mappen

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

4. Kopier filer på tværs af 2 fjernværter

Scp kan også kopiere filer fra 1 fjernvært til en anden fjernvært.

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

5. Fremskynde overførslen med komprimering

En superfed mulighed for at fremskynde overførslen for at spare tid og båndbredde. Det eneste, du skal gøre, er at bruge indstillingen C for at aktivere komprimering. Filerne komprimeres undervejs og dekomprimeres på destinationen.

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

I ovenstående eksempel har vi flyttet hele mappen med komprimering aktiveret. Hastighedsforøgelsen ville afhænge af, hvor meget filerne kunne komprimeres.

6. Begræns båndbreddeforbruget

Hvis du ikke ønsker, at scp skal optage hele den tilgængelige båndbredde, skal du bruge indstillingen l til at begrænse den maksimale hastighed i Kbit/s.

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

7. Opret forbindelse til et andet portnummer på fjernværten

Hvis fjernserveren har ssh-dæmon, der kører på en anden port (standard er 22), skal du fortælle scp, at det skal bruge det pågældende portnummer ved hjælp af indstillingen ‘-P’.

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

8. Bevar filattributter

Indstillingen ‘-p’ (små bogstaver), vil bevare ændringstider, adgangstider og tilstande fra den oprindelige fil.

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

9. Stille tilstand

I stille tilstand (‘-q’-indstillingen ) vil scp-udgangen blive undertrykt, og den vil deaktivere fremskridtsmåleren samt advarsels- og diagnostiske meddelelser.

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

10. Angiv identitetsfil

Når du bruger nøglebaseret (adgangskodefri) autentificering, skal du angive identitetsfilen, som indeholder den private nøgle. Denne indstilling overføres direkte til ssh-kommandoen og fungerer på samme måde.

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

11. Brug en anden ssh_config-fil

Brug indstillingen ‘-F’ for at angive en anden ssh_config-fil.

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

12. Brug en anden cipher

Scp bruger som standard AES-cipher/-kryptering. Nogle gange ønsker du måske at bruge en anden cipher. Brug af en anden cipher kan fremskynde overførselsprocessen. For eksempel er blowfish og arcfour kendt for at være hurtigere end AES (men mindre sikre).

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

I ovenstående eksempel bruger vi blowfish cipher sammen med komprimering. Dette kan give et betydeligt hastighedsforøgelse afhængigt af den tilgængelige båndbredde.

Summary

Selv om scp er meget effektivt til at overføre filer sikkert, mangler det de nødvendige funktioner i et værktøj til filsynkronisering. Alt det kan gøre er at kopiere indsætte alle de nævnte filer fra et sted til et andet.

Et mere kraftfuldt værktøj er Rsync, som ikke kun har alle funktioner fra scp, men tilføjer flere funktioner til intelligent at synkronisere filer på tværs af 2 værter. Det kan f.eks. kun kontrollere og uploade de ændrede filer, ignorere eksisterende filer og så videre.