Kiedy zachodzi potrzeba przeniesienia danych pomiędzy serwerami w środowisku Linux, stajemy przed wyborem różnych metod. Jeśli priorytetem jest bezpieczeństwo przesyłanych plików, warto rozważyć kilka sprawdzonych opcji. Najprostszym i jednocześnie bezpiecznym podejściem jest wykorzystanie polecenia `scp`, znanego również jako bezpieczne kopiowanie. Dzięki niemu transfer plików odbywa się bez obaw o nieautoryzowany dostęp. W niniejszym artykule pokażemy, jak efektywnie i bezpiecznie przesyłać pliki, posługując się poleceniem `scp` w systemie Linux.
Bezpieczny transfer plików z użyciem `scp` w Linux (2023)
Czym jest polecenie `scp` w Linux?
Polecenie `scp` okazuje się nieocenione w przypadku przesyłania plików w ramach bezpiecznej sieci. Stanowi skrót od Secure Copy Protocol i umożliwia przesyłanie zarówno pojedynczych plików, jak i całych katalogów pomiędzy dwoma systemami, z wykorzystaniem szyfrowanego połączenia SSH (Secure Shell). Dzięki temu, mamy pewność, że nasze dane są chronione, ponieważ standardowo przesyłane informacje są szyfrowane. Krótko mówiąc, `scp` to bezpieczniejsza alternatywa dla polecenia `cp`. Więcej informacji o poleceniach terminala w systemie Linux można znaleźć w naszym poprzednim artykule.
Składnia i opcje polecenia `scp`
Zanim przejdziemy do praktycznego przesyłania plików, warto przyjrzeć się składni i opcjom polecenia `scp`:
`scp` <opcje> <[email protected]_adres_ip:ścieżka/do/źródła/pliku> <[email protected]_adres_ip:ścieżka/docelowa>
Wyjaśnienie składni:
- <[email protected]_adres_ip:ścieżka/do/źródła/pliku> określa lokalizację źródłową, z której chcemy przenieść pliki lub katalogi.
- <[email protected]_adres_ip:ścieżka/docelowa> wskazuje system docelowy, gdzie pliki mają zostać zapisane.
Jeśli pominiemy jeden z tych parametrów, `scp` najpierw poszuka pliku w bieżącej lokalizacji, a następnie skopiuje go lokalnie. Najważniejsze opcje polecenia to:
Opcje:
- `-P` – definiuje port, przez który ma nastąpić połączenie z hostem. W przypadku braku tej opcji, domyślnie używany jest port 22.
- `-p` – zachowuje oryginalne czasy modyfikacji, dostępu i tryby plików w trakcie kopiowania.
- `-r` – umożliwia rekursywne kopiowanie całych katalogów do lokalizacji docelowej.
- `-J` – przydatna opcja do łączenia się z systemem źródłowym i docelowym poprzez serwer pośredniczący (tzw. „jump host”).
- `-3` – powoduje, że pliki są kopiowane zarówno do systemu docelowego, jak i lokalnego.
- `-4` – wymusza korzystanie wyłącznie z adresów IPv4.
- `-6` – wymusza korzystanie wyłącznie z adresów IPv6.
Jak kopiować pliki za pomocą `scp`?
Zanim zaczniemy używać `scp`, upewnijmy się, że spełnione są pewne wymagania wstępne, zarówno na hoście źródłowym, jak i docelowym:
- SSH musi być zainstalowany i uruchomiony.
- Dostęp do konta root lub użytkownika z uprawnieniami sudo.
Przesyłanie plików z komputera lokalnego na serwer zdalny
Aby przenieść plik z komputera lokalnego na zdalny serwer, skorzystaj z poniższej składni:
`scp` <opcje> <ścieżka_do_pliku_lokalnego> <użytkownik_zdalny>@<adres_ip_zdalnego_serwera>:<ścieżka_do_zapisu_na_serwerze>
Przykładowe użycie, które ułatwi zrozumienie powyższej składni:
`scp` test.txt [email protected]:/home/remote2/Dokumenty/
W tym przypadku:
- `test.txt` to nazwa pliku, który chcemy przesłać. Znajduje się on w bieżącym katalogu lokalnym.
- `test` to nazwa użytkownika na serwerze docelowym.
- `139.144.11.105` to adres IP serwera docelowego.
- `/home/remote2/Documents/` to ścieżka na serwerze docelowym, gdzie plik zostanie zapisany.
Pobieranie plików z serwera zdalnego na komputer lokalny
Jeśli chcesz przesłać plik z serwera zdalnego na swój komputer, użyj następującej składni:
`scp` <opcje> <zdalny_użytkownik>@<adres_ip_zdalnego_serwera>:<ścieżka_do_pliku_na_serwerze> <ścieżka_zapisu_na_komputerze>
Przykładowo, chcąc pobrać plik `test.py` z serwera zdalnego, użyjemy:
`scp` [email protected]:/home/test/test1.py ~/test1.py
W tym przykładzie:
- `test` to nazwa użytkownika na zdalnym serwerze.
- `10.10.11.113` to adres IP serwera zdalnego.
- `/home/test/test1.py` to ścieżka do pliku na serwerze zdalnym.
- `~/test1.py` to nazwa pliku po pobraniu na komputer lokalny i zapisaniu go w katalogu domowym.
Przesyłanie plików pomiędzy dwoma serwerami zdalnymi
Polecenie `scp` umożliwia nie tylko przesyłanie plików między komputerem lokalnym a serwerem, ale także między dwoma serwerami zdalnymi. Aby to zrobić, zaleca się wygenerowanie klucza prywatnego i publicznego SSH na serwerze źródłowym oraz umieszczenie kopii klucza publicznego na serwerze docelowym.
Użytkownicy często zgłaszają błąd „Host key verification failed” podczas przesyłania plików między dwoma zdalnymi systemami. Aby tego uniknąć, warto zastosować klucz SSH jako dodatkowe zabezpieczenie. Oto jak to zrobić:
1. Wygeneruj parę kluczy (publiczny i prywatny) na serwerze źródłowym za pomocą polecenia:
`ssh-keygen -t <algorytm_szyfrowania>`
2. Jako algorytm szyfrowania można wybrać `rsa`, który jest najczęściej używany lub dowolny inny.
3. Następnie wybierz lokalizację do przechowywania klucza. Możesz wybrać dowolne miejsce lub zachować domyślną lokalizację.
4. Możesz wprowadzić hasło lub pozostawić je puste, naciskając Enter.
5. Skopiuj klucz publiczny na serwer docelowy za pomocą poniższego polecenia. Umożliwi to logowanie do systemu docelowego bez hasła przy użyciu SSH.
`ssh-copy-id` <nazwa_użytkownika_docelowego>@<adres_ip_docelowego>
Pamiętaj, że logowanie bez hasła zadziała tylko dla użytkownika, dla którego wygenerowałeś klucz SSH.
6. Po utworzeniu i zapisaniu klucza SSH na serwerze zdalnym, użyj tej składni do przesyłania plików między dwoma zdalnymi systemami:
`scp` <opcje> <zdalny_użytkownik_1>@<adres_ip_zdalnego_hosta>:<ścieżka_do_pliku> <użytkownik_zdalny_2>@<adres_ip_zdalnego_celu>:<ścieżka_do_zapisu>
Przykładowo, aby przesłać plik `test.txt` z jednego serwera na drugi, użyj:
`scp` [email protected]:/home/test1/test.txt [email protected]:/home/remote2/Documents/test1.txt
W tym przykładzie:
- `remote1` to nazwa użytkownika na zdalnym hoście wysyłającym.
- `10.10.11.113` to adres IP tego hosta.
- `/home/test1/test.txt` to ścieżka do pliku, który ma zostać przesłany.
- `remote2` to nazwa użytkownika na zdalnym hoście docelowym.
- `10.11.27.111` to adres IP tego hosta.
- `/home/remote2/Documents/test1.txt` to nazwa i ścieżka, gdzie plik zostanie zapisany.
Przesyłanie wielu plików naraz za pomocą `scp`
Przesyłanie wielu plików jeden po drugim może być bardzo czasochłonne. Zamiast tego, użyj poniższej składni:
`scp` <ścieżka_do_pliku_1> <ścieżka_do_pliku_2> <zdalny_odbiornik>@<adres_ip_zdalnego_celu>:<ścieżka_do_zapisu>
Przykładowo, aby przesłać cztery pliki (test1.txt, test2.py, test3.sh i test4.c), użyj:
`scp -P 22` test1.txt test2.py test3.sh test4.c [email protected]:/home/remote_1/Dokumenty
Wyjaśnienie składni:
- `-P 22` określa port 22.
- `test1.txt test2.py test3.sh test4.c` to nazwy plików do przesłania.
- `remote_1` to nazwa użytkownika na serwerze docelowym.
- `10.10.11.113` to adres IP serwera docelowego.
- `/home/remote_1/Documents` to ścieżka na serwerze, gdzie pliki zostaną zapisane.
Możesz również użyć symboli wieloznacznych, aby przesłać pliki z tym samym rozszerzeniem:
`scp` <symbol_wieloznaczny>.<rozszerzenie> <zdalny_odbiornik>@<adres_ip_zdalnego_celu>:<ścieżka_do_zapisu>
Na przykład, aby przesłać wszystkie pliki z rozszerzeniem `.py`, użyj:
`scp` *.py [email protected]:/dom/zdalny_1/
W tym przypadku:
- `*.py` oznacza wszystkie pliki Pythona.
- `remote1` to nazwa użytkownika na serwerze docelowym.
- `10.10.11.113` to adres IP serwera docelowego.
- `/home/remote_1/` to ścieżka, gdzie pliki będą zapisane.
Najczęściej zadawane pytania
Czy przesyłanie plików za pomocą `scp` jest bezpieczne?
Secure Copy Protocol, czyli `scp`, jest protokołem opartym na SSH, wykorzystującym szyfrowanie i uwierzytelnianie podczas wymiany danych między hostami. Zapewnia to wysoki poziom bezpieczeństwa i integralność przesyłanych informacji.
Czy `scp` jest bezpieczniejszy niż SFTP?
Pod względem bezpieczeństwa oba protokoły, `scp` i SFTP, są porównywalne. Główną przewagą `scp` jest wyższa prędkość transferu, co jest szczególnie istotne w sieciach o wysokim opóźnieniu.
Bezpieczne przesyłanie plików za pomocą `scp` w Linux
Wszyscy użytkownicy systemów komputerowych w pewnym momencie stają przed potrzebą przesyłania plików przez sieć. Polecenie `scp` oferuje bezpieczny i efektywny sposób na transfer, nawet w sieciach o dużym opóźnieniu. Znajomość różnych opcji i składni `scp` może być bardzo przydatna. Zachęcamy również do zapoznania się z naszymi poradnikami o zmianie nazw plików i ich usuwaniu w systemie Linux, aby jeszcze bardziej usprawnić swoje umiejętności. Mamy nadzieję, że ten artykuł pomógł Ci zrozumieć, jak wykorzystać polecenie `scp` do bezpiecznego przesyłania plików. W razie jakichkolwiek problemów, zachęcamy do zadawania pytań w sekcji komentarzy.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.