Příkaz SCP (Secure Copy) je neinteraktivní příkaz pro bezpečné kopírování souborů a adresářů mezi dvěma systémy. SCP používá pro šifrování a ověřování protokol SSH, což z něj činí bezpečný způsob přenosu souborů mezi vzdálenými servery.
Nejste čtenář? Podívejte se na tento související video tutoriál! Nevidíte video? Ujistěte se, že máte vypnutý blokovač reklam.Pokud hledáte úžasného průvodce používáním příkazu SCP, už nehledejte. Tento tutoriál vám ukáže příklady použití příkazů SCP, které by vám mohly pomoci stát se sebevědomým uživatelem SCP.
Připraveni? Čtěte dále a posuňte přenos souborů na další úroveň!
Předpoklady
Tento tutoriál bude praktickou ukázkou. Pokud chcete pokračovat, ujistěte se, že splňujete následující požadavky.
- Budete potřebovat dva počítače se systémem Linux, které budou fungovat jako zdroj a cíl kopírování ve stejné nebo různých sítích. Tento výukový program bude používat počítače Ubuntu 20.04, jak je uvedeno v tabulce níže.
Název počítače | Označení |
ubuntu1 | Hostitel zdroje |
ubuntu2 | Cílový hostitel |
- Pokud je brána firewall na každém počítači nebo mezi dvěma počítači, ujistěte se, že je otevřený port 22.
- Tento výukový program předpokládá, že jste již otevřeli relaci SSH a přihlásili se na oba počítače.
Kopírování souboru pomocí příkazu SCP
Existuje mnoho důvodů, proč byste chtěli kopírovat soubory z jednoho systému do druhého. Možná pro účely zálohování replikujte konfigurační soubory nebo jednoduše chcete mít kopii souborů. Ať už je důvod jakýkoli, příkaz SCP vám drží záda.
Základní syntaxe příkazu SCP je následující.
scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2
Kde:
Option
– určuje jakékoli možnosti, které se mají použít, jako je šifra nebo limit. V tomto tutoriálu budete používat některé běžné možnosti.user1
– je uživatelské jméno na zdrojovém hostiteli.SRC_HOST
– je název hostitele nebo IP adresa zdroje kopie .your_file1
– je cesta a název souboru, který chcete zkopírovat.DEST_HOST
– je název hostitele nebo IP adresa cíle kopie .user2
– je uživatelské jméno s přístupem k cílovému hostiteli.your_file2
– je cesta a název souboru, který chcete zkopírovat zyour_file1
Poznámka:Cesty k souborům můžete zadat pomocí relativní nebo absolutní cesty v místním systému. Ale cesty k souborům ve vzdáleném systému musí používat uživatelské jméno s absolutní cestou.
Nyní, když rozumíte základní syntaxi, můžete začít s cvičením kopírování souboru pomocí příkazu SCP.
1. Začněte vytvořením nového souboru s názvem backup.txt v domovském adresáři na ubuntu1 .
# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash
2. Dále vytvořte nový adresář s názvem backup na ubuntu2. Tento adresář bude cílovou cestou kopírování souboru.
# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd
3. Nyní spusťte níže uvedený příkaz scp na ubuntu1 a zkopírujte soubor backup.txt do zálohy adresář na ubuntu2. Nezapomeňte nahradit uživatelské jméno a cestu svými.
scp backup.txt [email protected]:/home/ata/backup
Pokud chcete soubor zkopírovat pod jiným názvem, přidejte nový název souboru k cílové cestě. Příklad:scp backup.txt [email protected]:/home/ata/backup/backup2.txt
4. Pokud se nyní připojujete k ubuntu2 poprvé hostitele, zadejte yes
na výzvu k potvrzení a stiskněte klávesu Enter.
5. Dále zadejte heslo uživatelského účtu na ubuntu2 a stiskněte Enter. Jakmile zadáte správné heslo, kopírování souboru bude pokračovat.
6. Po zkopírování souboru přepněte na svůj ubuntu2 terminál a spusťte níže uvedený příkaz pro zobrazení obsahu adresáře.
ls
Potvrďte, že soubor backup.txt existuje a soubor jste úspěšně zkopírovali.
7. Dále zobrazte obsah zkopírovaného souboru, abyste se ujistili, že je soubor neporušený na ubuntu2 .
cat backup.txt
8. Abyste potvrdili, že jsou soubory totožné, získejte kontrolní součet SHA1 každého souboru na obou počítačích a porovnejte hodnoty. Tento krok je doplňkovým opatřením k ověření, zda se integrita souboru během přenosu nezměnila.
# on ubuntu1 and ubuntu2
sha1sum backup.txt
Spuštění rekurzivního kopírování pomocí příkazu SCP
V předchozí části jste se naučili kopírovat jednotlivé soubory z místního systému do vzdáleného systému pomocí příkazu SCP. V reálných scénářích často potřebujete zkopírovat celý adresář s jeho podadresáři a soubory.
Kopírování celých adresářů se obvykle vztahuje na scénáře zálohování. Předpokládejme, že váš server (ubuntu1) provozuje webový server, jehož soubory jsou v /var/www/ adresář. Níže je ukázková stromová struktura složek.
/var/www
├── html
│ └── index.html
└── your_domain
└── index.html
Pomocí příkazu SCP můžete bez námahy zálohovat celou složku do vzdáleného umístění.
Ve většině případů probíhají operace zálohování prostřednictvím automatizačních skriptů a naplánovaných úloh nebo úloh cron. Tento příklad ukazuje, jak byste ručně zálohovali celý adresář.
1. Nejprve vytvořte zálohu webového serveru adresář na ubuntu2 .
# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup
2. Dále se přepněte zpět na ubuntu1 terminálu a spusťte níže uvedený příkaz SCP. Přepínač -r umožňuje režim rekurzivního kopírování, což znamená, že SCP zkopíruje celý /var/www/ z horní složky dolů do posledního souboru.
scp -r /var/www/ [email protected]:/home/ata/web-server-backup
3. Nyní spusťte příkaz tree na obou systémech a porovnejte strukturu adresářů. Na ubuntu1 , zobrazí se strom adresářů pro /var/www . Na ubuntu2 zobrazíte strom adresářů pro záložní adresář, což je /home/ata/web-server-backup v tomto příkladu.
# on ubuntu1
tree /var/www/
# on ubuntu2
tree /home/ata/web-server-backup
Filtrování přípon souborů ke kopírování
Předpokládejme, že máte v místním systému adresář obsahující smíšené typy souborů s různými příponami. V rámci své úlohy byste měli zkopírovat všechny soubory z této složky do vzdáleného počítače pomocí příkazu SCP. Již víte, jak kopírovat celé adresáře.
Podmínkou však je, že musíte zkopírovat pouze všechny soubory s *.txt rozšíření. Nepanikařte; jste stále na správné cestě a řešení není daleko od toho, co jste již dělali v předchozích částech. K filtrování souborů ke kopírování budete používat zástupné znaky.
Běžnými zástupnými znaky jsou hvězdička (*), která představuje nula, jeden nebo více znaků, a otazník (?), což znamená jeden znak.
1. Nejprve vytvořte ukázkovou složku a soubory na ubuntu1, které budete později kopírovat. Spuštěním příkazu níže vytvořte složku foo a soubory s příponami *.txt, *.doc a *.ppt.
# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory
2. Dále se přepněte na svůj terminál ubuntu2 a vytvořte adresář nazvaný bar . Tento adresář bude vaší cílovou cestou kopírování.
# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar
3. Přepněte zpět na ubuntu1 terminálu a spusťte níže uvedený příkaz SCP. Všimněte si, že tentokrát místo určení konkrétní složky jako zdroje váš zdroj obsahuje zástupný znak, který odpovídá všem souborům s txt rozšíření uvnitř foo složka.
scp *.txt [email protected]:/home/ata/bar/
Zadejte heslo účtu a kopírování by mělo pokračovat. Jak můžete vidět níže, příkaz SCP pouze zkopíroval txt soubory, přestože zdrojová složka obsahuje jiné typy souborů.
4. Nakonec přepněte na terminál ubuntu2 a seznam souborů v liště adresář.
ls -l bar/
Výsledek by měl potvrdit, že v adresáři existují pouze soubory *.txt.
Povolení ověřování na základě klíče
Zadávání hesla cílového účtu může být zdlouhavé a těžkopádné. Autentizace na základě hesla je také méně bezpečná a není vhodná pro automatizaci. Jaká je alternativa? Povolit ověřování na základě klíče.
Jak víte, příkaz SCP používá pod kapotou SSH. A SSH vám dává možnost autentizace pomocí klíčů SSH namísto hesel. Kroky pro nastavení SCP s autentizací klíče SSH jsou následující.
1. Na ubuntu1 , vygenerujte pár klíčů SSH spuštěním příkazu ssh-keygen.
ssh-keygen -t rsa
2. Stisknutím klávesy Enter přijměte výchozí cestu, do které se má klíč uložit. Nakonec stiskněte dvakrát Enter, aby se ke klíči nepřidala přístupová fráze.
Jak můžete vidět níže, příkaz vytvořil dva soubory. Soubor id_rsa je váš soukromý klíč, který zůstane ve zdrojovém počítači. Naopak byste měli zkopírovat id_rsa.pub do cílového hostitele.
3. Spusťte níže uvedený příkaz a zkopírujte svůj veřejný klíč do vzdáleného hostitele ubuntu2 .
ssh-copy-id [email protected]
Po výzvě zadejte heslo cílového účtu, abyste mohli pokračovat v kopírování veřejného klíče.
4. Nyní, když jste vygenerovali pár klíčů SSH, spusťte níže uvedený příkaz a bezpečně zkopírujte backup.txt soubor z ubuntu1 na ubuntu2 . Argument -i ~/.ssh/id_rsa říká příkazu SCP, aby se autentizoval pomocí souboru klíče SSH.
scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt
Příkaz SCP již nevyžaduje zadání hesla, jak můžete vidět níže.
A je to! Zbavili jste se té otravné výzvy k zadání hesla a vaše relace SSH byla ještě bezpečnější.
Závěr
Tento článek vás naučil, jak používat příkaz SCP k bezpečnému kopírování souborů mezi dvěma systémy Linux. Také jste se naučili, jak používat SCP s klíči SSH pro autentizaci. Nyní, když jste se dozvěděli o příkazu SCP, vyzkoušejte jej, až budete příště potřebovat zkopírovat jeden do hromadných souborů mezi počítači.