Jak korzystać z polecenia scp w systemie Linux

Opublikowany: 2022-06-28
Terminal Linux na ekranie laptopa.
fatmawati achmad zaenuri/Shutterstock.com

Polecenie scp sprawia, że ​​kopiowanie plików między komputerami z systemem Linux jest łatwe i bezpieczne. Korzysta z zabezpieczeń SSH, ale co najważniejsze, jest prosty. Jeśli możesz użyć cp , możesz użyć scp .

Protokół bezpiecznego kopiowania i scp

Zdefiniujmy kilka terminów: jest SCP i jest scp . Wielkie litery SCP oznaczają protokół bezpiecznego kopiowania. Małe litery scp oznaczają bezpieczne cp . Innymi słowy, SCP to protokół, a scp to program.

scp został zaprojektowany jako bezpieczny sposób kopiowania plików między zdalnymi komputerami z systemem Linux. Używa SSH do nawiązywania bezpiecznych połączeń. SSH lub bezpieczna powłoka to kryptograficzny protokół sieciowy często używany do uzyskiwania dostępu i logowania się do zdalnych komputerów z systemem Linux. W dystrybucjach systemu Linux funkcjonalność SSH zapewnia OpenSSH.

Jak skonfigurować zdalny pulpit na Ubuntu
POWIĄZANE Jak skonfigurować zdalny pulpit na Ubuntu

SCP jest dość długi w zębie i pojawiły się obawy dotyczące jego użycia w dzisiejszych czasach. Od wersji OpenSSH 8.8 SCP jest uważany za przestarzały. Nowoczesne implementacje scp domyślnie korzystają z protokołu bezpiecznego przesyłania plików. SSH jest nadal używany do bezpiecznego połączenia, ale transfery plików są obsługiwane przez SFTP. To wszystko jest niewidoczne i dzieje się magicznie pod maską, a składnia scp pozostała taka sama.

Program rsync jest lepszy niż scp , ale możesz napotkać komputer, który nie ma zainstalowanego rsync i dla którego nie masz uprawnień roota, co oznacza, że ​​nie możesz go zainstalować. Do kopiowania plików z komputera na komputer w niezależnej sieci scp doskonale nadaje się. Aby scp działał, musisz mieć uruchomione SSH na wszystkich komputerach, na które i z których będziesz kopiować.

Aby zobaczyć wersję OpenSSH zainstalowaną na komputerze, wpisz:

 ssh -V 

Uzyskanie wersji OpenSSH

Kopiowanie pojedynczego pliku

Podobnie jak standardowe polecenie cp , scp kopiuje pliki z lokalizacji źródłowej do lokalizacji docelowej . Aby skopiować plik na komputer zdalny, musisz znać adres IP lub nazwę sieciową komputera zdalnego. Musisz także mieć poświadczenia konta użytkownika, które ma uprawnienia do zapisu dla lokalizacji, do której wysyłasz plik.

Aby wysłać plik o nazwie „sample.txt” do komputera o nazwie „fedora-34” w sieci lokalnej, składnia jest następująca:

 scp ./przykład.txt [email protected]:/home/dave/Pobrane/ 

Kopiowanie pojedynczego pliku na zdalny komputer

Polecenie składa się z:

  • scp : Polecenie scp
  • ./sample.txt : Plik, który zamierzamy wysłać. To jest w bieżącym katalogu.
  • dave@ : Konto użytkownika na zdalnym komputerze, do którego wyślemy plik.
  • fedora-34.local : Nazwa sieciowa zdalnego komputera.
  • :/home/dave/Downloads/ : Lokalizacja, do której ma zostać skopiowany plik na zdalnym komputerze. Zwróć uwagę na dwukropek „:”, który oddziela nazwę komputera od ścieżki.

Zostaniesz poproszony o podanie hasła do konta na komputerze zdalnym, a następnie plik zostanie skopiowany.

Jeśli chcesz, aby plik miał inną nazwę na komputerze zdalnym, możesz dodać nazwę pliku do ścieżki docelowej. Aby skopiować ten sam plik i nadać mu nazwę „different-file.txt”, użyj następującej składni:

 scp ./sample.txt [email protected]:/home/dave/Downloads/inny-plik.txt 

Kopiowanie pojedynczego pliku na zdalny komputer pod nową nazwą

Polecenie scp po cichu nadpisze istniejące pliki, więc zachowaj ostrożność podczas kopiowania plików. Jeśli plik o tej samej nazwie co kopiowany plik już istnieje na komputerze docelowym, zostanie on nadpisany i utracony.

Jeśli komputer docelowy nie używa domyślnego portu SSH 22, możesz użyć opcji -P (numer portu), aby podać odpowiedni numer portu.

Pobieranie pojedynczego pliku

Aby skopiować plik ze zdalnego serwera, po prostu umieść zdalny serwer jako źródło i umieść lokalną ścieżkę w miejscu, w którym chcesz skopiować plik jako cel. Zamierzamy skopiować plik o nazwie „development-plan.md” z komputera zdalnego do bieżącego katalogu na komputerze lokalnym.

 scp [email protected]:/home/dave/Downloads/development-plan.md . 

Kopiowanie pojedynczego pliku ze zdalnego serwera do bieżącego katalogu na komputerze lokalnym

Jeśli dodasz nazwę pliku do ścieżki lokalnej, plik zostanie skopiowany i otrzyma tę nazwę.

 scp [email protected]:/home/dave/Downloads/development-plan.md ./dp-1.md 

Kopiowanie pojedynczego pliku ze zdalnego serwera do bieżącego katalogu na lokalnym komputerze pod nową nazwą

Plik jest kopiowany, ale jego nazwa jest zmieniana na określoną przez nas nazwę pliku.

 ls -hl *.md 

Kopiowanie wielu plików

Kopiowanie wielu plików w dowolnym kierunku jest łatwe. Możesz wyświetlić dowolną liczbę plików źródłowych. Tutaj kopiujemy dwa pliki przecen i plik CSV.

 scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Pobrane/ 

Kopiowanie wielu nazwanych plików na zdalny komputer

Trzy pliki są kopiowane na zdalny komputer. Możesz także użyć symboli wieloznacznych. To polecenie robi dokładnie to samo, co ostatnie polecenie.

 scp ./dp . [email protected]:/home/dave/Pobrane/ 

Kopiowanie wielu plików na zdalny komputer za pomocą symboli wieloznacznych w nazwie pliku

Rekursywne kopiowanie katalogów

Opcja -r (rekursywna) pozwala kopiować całe drzewa katalogów za pomocą jednego polecenia. Umieściliśmy dwa pliki w katalogu o nazwie „data” i utworzyliśmy katalog o nazwie „CSV” w katalogu „data”. Umieściliśmy plik CSV w katalogu „data/CSV”.

To polecenie kopiuje pliki i odtwarza strukturę katalogów na komputerze zdalnym.

 scp -r ./data [email protected]:/home/dave/Pobrane/ 

Kopiowanie drzewa katalogów na zdalny komputer

Kopiowanie plików między zdalnymi serwerami

Możesz nawet polecić scp kopiowanie plików z jednego zdalnego serwera na drugi. Składnia jest dość prosta. Podajesz nazwę konta i adres sieciowy serwera źródłowego oraz nazwę konta i adres sieciowy serwera docelowego. Pliki są kopiowane z serwera źródłowego i kopiowane do lokalizacji na serwerze docelowym.

Chociaż składnia jest prosta, zapewnienie, że wszystko inne jest na miejscu, wymaga nieco więcej przemyśleń. Oczywiście lokalizacja, do której próbujesz skopiować pliki na zdalnym serwerze, musi być dostępna z konta użytkownika określonego w wierszu polecenia. A to konto użytkownika musi mieć uprawnienia do zapisu w tej lokalizacji.

Bardziej subtelnym warunkiem wstępnym jest skonfigurowanie dostępu SSH między komputerem lokalnym a komputerem źródłowym, a także między serwerem źródłowym a docelowym. Upewnij się, że możesz użyć protokołu SSH do zalogowania się do serwera docelowego z serwera źródłowego . Jeśli nie możesz tego zrobić, scp nie będzie mógł się połączyć.

Jak tworzyć i instalować klucze SSH z powłoki systemu Linux?
POWIĄZANE Jak tworzyć i instalować klucze SSH z powłoki systemu Linux

Zdecydowanie preferowaną metodą jest skonfigurowanie kluczy SSH, aby można było korzystać z dostępu uwierzytelnionego, ale bez hasła. Korzystanie z haseł bardzo szybko staje się nieuporządkowane, a ponieważ pojawia się monit o podanie hasła dla każdego konta użytkownika, uniemożliwia to pełną automatyzację procesu za pomocą skryptu.

Konfigurujemy klucze SSH dla kont użytkowników, których używamy na każdym zdalnym serwerze. Zapewniło to tym dwóm użytkownikom bezproblemowy dostęp SSH do drugiego serwera. Dzięki temu możemy przesyłać pliki w dowolnym kierunku, korzystając z tych dwóch kont użytkowników.

Aby skopiować pliki z konta użytkownika „davem” na komputerze Manjaro na konto „dave” na komputerze Fedora, za pomocą polecenia scp wydanego z naszego lokalnego komputera Ubuntu, składnia jest następująca:

 scp [email protected]:/home/davem/man . [email protected]:/home/dave/ 

Kopiowanie plików z jednego zdalnego serwera na drugi.

Po cichu wracamy do wiersza poleceń. Nic nie wskazuje na to, żeby coś się stało. Wychodząc z założenia, że ​​żadne wiadomości nie są dobrą wiadomością, scp zgłasza tylko błędy dla tego zdalnego kopiowania. Po sprawdzeniu komputera Fedory widzimy, że pliki z komputera Manjaro zostały skopiowane i odebrane.

Pliki z komputera Manjaro odebrane na komputerze Fedory

Domyślnie pliki są kopiowane bezpośrednio z komputera źródłowego na komputer docelowy. Możesz to zmienić za pomocą opcji -3 (trójstronnej).

Dzięki tej opcji pliki są przesyłane z miejsca docelowego do źródła za pośrednictwem komputera lokalnego. Aby tak się stało, musi istnieć bezproblemowy dostęp SSH z komputera lokalnego do komputera docelowego.

 scp -3 [email protected]:/home/davem/man . [email protected]:/home/dave/ 

Kopiowanie plików z jednego zdalnego serwera na drugi za pośrednictwem komputera lokalnego

Nadal nic nie wskazuje na to, że coś się stało, nawet podczas przesyłania plików przez komputer lokalny. Dowodem na pudding jest oczywiście sprawdzenie komputera docelowego.

Inne opcje

Opcja -p (zachowaj atrybuty pliku) zachowa oryginalne flagi tworzenia, własności i dostępu do przesyłanych plików. Będą miały te same metadane, co oryginalne pliki na komputerze źródłowym.

Jeśli zobaczysz komunikaty o błędach, spróbuj powtórzyć polecenie i użyj flagi -v (pełny), aby wyświetlić szczegółowe informacje o próbie transferu. Powinieneś być w stanie dostrzec punkt awarii w danych wyjściowych.

Opcja -C (kompresuj) kompresuje pliki podczas ich kopiowania i dekompresuje je, gdy są odbierane. To jest coś, co sięga ery powolnej komunikacji modemowej między komputerami. Zmniejszenie rozmiaru ładunku może skrócić czas transmisji.

W dzisiejszych czasach czas potrzebny na kompresję i dekompresję plików jest prawdopodobnie dłuższy niż różnica między transmisjami skompresowanymi i nieskompresowanymi. Ale ponieważ scp najlepiej nadaje się do kopiowania plików między komputerami w tej samej sieci LAN, prędkość transmisji nie powinna być zbytnio martwi.

POWIĄZANE: Jak wykonać kopię zapasową systemu Linux za pomocą rsync