scp-kommando – Säker kopia

Scp (Secure Copy) är ett kommandoradsverktyg för att kopiera eller överföra filer mellan värdar. Det använder samma typ av säkerhetsmekanism som ssh-programmet.

Det använder faktiskt en ssh-anslutning i bakgrunden för att utföra filöverföringen. scp hänvisar både till ”protokollet” som definierar hur secure copy ska fungera och till ”programmet” (kommandot) som installeras som en del av verktygssviten OpenSSH.

I denna snabba handledning ska vi titta på några exempel scp-kommandot och hur det kan användas för att överföra filer på ett säkert sätt.

Hur man installerar scp

Scp installeras i allmänhet som standard på de flesta Linux-distros som en del av openssh-paketen. På ubuntu/debian till exempel tillhandahåller openssh-client-paketet scp-programmet.

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

Det är OpenSSH-paketet som tillhandahåller programmen ssh, scp, sftp tillsammans med många andra verktyg. Så vi behöver inte göra något extra här inne, förutom att använda och lära oss programmet.

Användning av scp – grundläggande syntax

Den grundläggande syntaxen för scp är mycket enkel att memorera. Den ser ut så här

$ scp source_file_path destination_file_path

Avhängigt av värddatorn ska filsökvägen innehålla fullständig värdadress, portnummer, användarnamn och lösenord tillsammans med katalogsökvägen.

Så om du ”skickar” en fil från din lokala maskin till en fjärrmaskin (uppladdning) skulle syntaxen se ut så här

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

När du kopierar en fil från en fjärrvärddator till en lokal värd (nedladdning) ser det precis tvärtom ut

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

Det är ganska mycket om att använda scp för vanliga uppgifter. Utöver detta finns det ett par extra alternativ och funktioner som scp stöder. Låt oss ta en snabb översikt över dessa.

Och ja, som standard kommer scp alltid att skriva över filer på destinationen. Om du behöver undvika det kan du använda ett mer kraftfullt verktyg som heter rsync.

Exempel på scp-kommandon

1. Verbose output

Med verbose output skulle scp-programmet ge ut massor av information om vad det gör i bakgrunden. Detta är ofta användbart när programmet misslyckas eller inte kan slutföra begäran. Verbose-utmatningen skulle då ange exakt var programmet fick problem.

$ 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

Utmatningen skulle vara stor och innehålla detaljerad information om hur anslutningen görs, vilka konfigurations- och identitetsfiler som används och så vidare.

2. Överför flera filer

Flera filer kan anges separerade med ett mellanslag så här

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

För att kopiera flera filer från fjärrvärd till aktuell lokal katalog

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

3. Kopiera hela katalogen (rekursivt)

För att kopiera en hel katalog från en värddator till en annan använder du växeln r och anger katalogen

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

4. Kopiera filer mellan två fjärrvärdar

Scp kan också kopiera filer från en fjärrvärddator till en annan fjärrvärddator.

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

5. Snabba upp överföringen med komprimering

Ett superhäftigt alternativ för att snabba upp överföringen för att spara tid och bandbredd. Allt du behöver göra är att använda alternativet C för att aktivera komprimering. Filerna komprimeras i farten och dekomprimeras på destinationen.

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

I exemplet ovan flyttade vi hela katalogen med komprimering aktiverad. Hastighetsvinsten skulle bero på hur mycket filerna kunde komprimeras.

6. Begränsa bandbreddsanvändningen

Om du inte vill att scp ska ta upp hela den tillgängliga bandbredden använder du alternativet l för att begränsa den maximala hastigheten i Kbit/s.

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

7. Anslut till ett annat portnummer på fjärrvärden

Om fjärrservern har ssh daemon som körs på en annan port (standard är 22) måste du tala om för scp att använda just det portnumret med hjälp av alternativet ”-P”.

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

8. Bevara filattribut

Optionen ”-p” (liten bokstavsform), skulle bevara modifieringstider, åtkomsttider och lägen från originalfilen.

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

9. Tyst läge

I tyst läge (”-q”-alternativet) skulle scp-utmatningen undertryckas, och skulle inaktivera förloppsindikatorn samt varnings- och diagnostiska meddelanden.

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

10. Ange identitetsfil

När du använder nyckelbaserad (lösenordsfri) autentisering måste du ange identitetsfilen som innehåller den privata nyckeln. Det här alternativet skickas direkt till kommandot ssh och fungerar på samma sätt.

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

11. Använd en annan ssh_config-fil

Använd alternativet ”-F” för att ange en annan ssh_config-fil.

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

12. Använd ett annat chiffer

Scp använder som standard AES-chiffer/kryptering. Ibland kanske du vill använda ett annat chiffer. Om du använder ett annat chiffer kan överföringen påskyndas. Till exempel blowfish och arcfour är kända för att vara snabbare än AES (men mindre säkra).

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

I exemplet ovan använder vi blowfish-chiffret tillsammans med komprimering. Detta kan ge en betydande hastighetsökning beroende på tillgänglig bandbredd.

Summary

Although scp is very efficient at transferring file securely, it lacks necessary features of a file synchronisation tool. Allt det kan göra är att kopiera och klistra in alla nämnda filer från en plats till en annan.

Ett kraftfullare verktyg är Rsync som inte bara har alla funktioner som scp har, utan lägger till fler funktioner för att på ett intelligent sätt synkronisera filer mellan två värdar. Det kan till exempel kontrollera och ladda upp endast ändrade filer, ignorera befintliga filer och så vidare.