příkaz scp – Secure copy

Scp (Secure Copy) je nástroj příkazového řádku pro kopírování nebo přenos souborů mezi hostiteli. Používá stejný druh bezpečnostního mechanismu jako program ssh.

Ve skutečnosti používá k přenosu souborů připojení ssh na pozadí. scp označuje jak „protokol“, který definuje, jak má bezpečné kopírování fungovat, tak „program“ (příkaz), který je nainstalován jako součást sady nástrojů OpenSSH.

V tomto stručném návodu se podíváme na několik příkladů příkazu scp a na to, jak jej lze použít k bezpečnému přenosu souborů.

Jak nainstalovat scp

Scp je obecně ve většině linuxových distribucí standardně nainstalován jako součást balíčků openssh. Například v ubuntu/debianu poskytuje program scp balíček openssh-client.

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

Je to balíček OpenSSH, který poskytuje programy ssh, scp, sftp spolu s mnoha dalšími nástroji. Nemusíme zde tedy dělat nic navíc, kromě používání a učení se programu.

Používání programu scp – základní syntaxe

Základní syntaxe programu scp je velmi jednoduchá na zapamatování. Vypadá takto

$ scp source_file_path destination_file_path

V závislosti na hostiteli by cesta k souboru měla obsahovat úplnou adresu hostitele, číslo portu, uživatelské jméno a heslo spolu s cestou k adresáři.

Pokud tedy „posíláte“ soubor z místního počítače na vzdálený počítač (upload), syntaxe bude vypadat takto

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

Pokud kopírujete soubor ze vzdáleného hostitele na místního hostitele (download), vypadá to přesně naopak

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

To je zhruba tolik o používání scp pro běžné úlohy. Kromě toho existuje několik dalších možností a funkcí, které scp podporuje. Podívejme se na ně v rychlosti.

A ano, ve výchozím nastavení scp vždy přepíše soubory v cíli. Pokud se tomu potřebujete vyhnout, použijte výkonnější nástroj rsync.

Příklady příkazů scp

1. Slovní výstup

Při slovním výstupu by program scp vypisoval spoustu informací o tom, co dělá na pozadí. To je často užitečné, když program selže nebo není schopen dokončit požadavek. Ve verbose výstupu by pak bylo uvedeno přesné místo, kde program narazil na problémy.

$ 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

Výstup by byl velký a obsahoval by podrobné informace o tom, jak je navázáno spojení, jaké konfigurační a identifikační soubory se používají atd.

2. Přenos více souborů

Více souborů lze zadat oddělených mezerou takto

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

Kopírování více souborů ze vzdáleného hostitele do aktuálního lokálního adresáře

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

3. Kopírování více souborů ze vzdáleného hostitele. Kopírování celého adresáře (rekurzivně)

Pro kopírování celého adresáře z jednoho hostitele na druhého použijte přepínač r a zadejte adresář

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

4. Kopírování souborů přes 2 vzdálené hostitele

Scp může kopírovat soubory i z 1 vzdáleného hostitele na jiného vzdáleného hostitele.

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

5. Kopírování souborů přes 2 vzdálené hostitele

Scp může kopírovat soubory i z 1 vzdáleného hostitele na jiného vzdáleného hostitele. Zrychlení přenosu pomocí komprese

Super skvělá možnost, jak zrychlit přenos a ušetřit čas a šířku pásma. Jediné, co musíte udělat, je použít volbu C pro zapnutí komprese. Soubory jsou komprimovány za běhu a dekomprimovány v cíli.

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

V uvedeném příkladu jsme přesunuli celý adresář s povolenou kompresí. Zvýšení rychlosti by záviselo na tom, jak moc by bylo možné soubory komprimovat.

6. Omezte využití šířky pásma

Pokud nechcete, aby scp zabíralo celou dostupnou šířku pásma, použijte volbu l pro omezení maximální rychlosti v Kbit/s.

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

7. Omezte využití šířky pásma. Připojení k jinému číslu portu na vzdáleném hostiteli

Pokud má vzdálený server démona ssh spuštěného na jiném portu (výchozí je 22), pak je třeba říci scp, aby použil toto konkrétní číslo portu pomocí volby ‚-P‘.

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

8. Zachování atributů souboru

Volba ‚-p‘ (malá písmena), by zachovala časy modifikace, přístupové časy a režimy z původního souboru.

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

9. Připojení k jinému číslu portu na vzdáleném hostiteli

Pokud má vzdálený server démona ssh spuštěného na jiném portu (výchozí je 22), pak je třeba říci scp, aby použil toto konkrétní číslo portu. Tichý režim

V tichém režimu ( volba ‚-q‘ ) by se výstup scp potlačil a vypnul by se ukazatel průběhu a varovná a diagnostická hlášení.

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

10. Zadejte soubor identity

Při použití ověřování na základě klíče (bez hesla) byste museli zadat soubor identity, který obsahuje soukromý klíč. Tato volba se předává přímo příkazu ssh a funguje stejným způsobem.

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

11. Použití jiného souboru ssh_config

Pomocí volby ‚-F‘ můžete zadat jiný soubor ssh_config.

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

12. Použít jinou šifru

Scp ve výchozím nastavení používá šifru/šifrování AES. Někdy můžete chtít použít jinou šifru. Použití jiné šifry může urychlit proces přenosu. Například je známo, že šifry blowfish a arcfour jsou rychlejší než AES (ale méně bezpečné).

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

V uvedeném příkladu používáme šifru blowfish spolu s kompresí. To může přinést výrazné zvýšení rychlosti v závislosti na dostupné šířce pásma.

Shrnutí

Ačkoli je scp velmi efektivní při bezpečném přenosu souborů, postrádá potřebné funkce nástroje pro synchronizaci souborů. Jediné, co umí, je kopírovat a vkládat všechny zmíněné soubory z jednoho umístění do druhého.

Výkonnějším nástrojem je Rsync, který má nejen všechny funkce scp, ale přidává další funkce pro inteligentní synchronizaci souborů mezi dvěma hostiteli. Dokáže například kontrolovat a odesílat pouze změněné soubory, ignorovat existující soubory a podobně.