Articles

Przesyłanie Plików Pomiędzy Maszynami Linuksowymi Przez SSH

Przegląd

Czasami chcemy bezpiecznie przesyłać pliki z jednej maszyny linuksowej na drugą. Być może chcemy przesłać jakieś pliki na serwer produkcyjny lub wykonać kopię zapasową.

W tym artykule przyjrzymy się różnym narzędziom do przesyłania plików pomiędzy maszynami linuksowymi poprzez ssh, najpopularniejszy protokół zdalnego połączenia pomiędzy maszynami linuksowymi.

Przyjrzymy się dwóm najpopularniejszym narzędziom do przesyłania plików: scp i rsync.

Podstawowe zastosowanie narzędzi

2.1. Szybki przykład

Wyobraźmy sobie, że chcemy skopiować plik text.log z naszego lokalnego systemu do ścieżki /var/log na zdalnym serwerze linuksowym o adresie IP 111.111.111.111, i chcemy użyć poświadczeń użytkownika root.

Można to osiągnąć za pomocą scp lub rsync, używając tej samej podstawowej składni:

scp text.log :/var/logrsync text.log :/var/log

Zrozummy, co te polecenia mają wspólnego, zanim poznamy ich odmiany i różnice.

2.2. Ogólna składnia

Ogólna składnia scp lub rsync jest następująca:

scp/rsync ]Source_File ]Destination_file

Sekcja OPTION pozwala nam na użycie przełączników wiersza poleceń do modyfikacji zachowania operacji kopiowania. Dwie ścieżki dla źródła i miejsca docelowego pozwalają nam określić ścieżkę do pliku po obu stronach operacji kopiowania, jak również konta użytkowników, które mają być użyte.

W powyższym przykładzie, lokalny plik jest kopiowany do zdalnej lokalizacji – . Jak zobaczymy później, możemy użyć formatu remote do opisania źródła lub celu, pozwalając tym poleceniom zarówno na wysyłanie plików na serwer, jak i pobieranie plików z serwera.

2.3. Ważne rzeczy do zapamiętania

Jest kilka punktów, o których należy pamiętać, gdy przesyłamy pliki przez ssh używając dowolnego narzędzia:

  • Komenda scp/rsync poprosi o hasło użytkownika do zalogowania się na zdalnym serwerze, jeśli nie mamy ustawionego auto-logowania poprzez wymianę kluczy RSA
  • Nie musimy podawać naszej nazwy użytkownika lub IP serwera dla naszego lokalnego serwera
  • Możemy podać ścieżkę bezwzględną lub względną do pliku źródłowego/docelowego, gdzie ścieżki względne są względne do bieżącego katalogu roboczego lub katalogu domowego zdalnego użytkownika

2.4. Określenie nazwy pliku

Podanie nazwy pliku w ścieżce docelowej nie jest obowiązkowe. Jeśli nie podamy nazwy pliku, zostanie użyta nazwa pliku źródłowego.

W naszym pierwszym przykładzie, w katalogu docelowym zostanie utworzony plik o nazwie text.log. Gdybyśmy chcieli, aby plik został zapisany pod inną nazwą, moglibyśmy podać nazwę pliku jako część ścieżki docelowej.

Używając niejawnej nazwy pliku, możemy skopiować plik ze zdalnego serwera Linux do bieżącego katalogu z jego oryginalną nazwą:

scp :/var/log/text.log .rsync :/var/log/text.log .

Tutaj parametr „.” reprezentuje bieżący katalog roboczy. Możemy również podać inną ścieżkę, jeśli chcemy:

scp :/var/log/text.log /opt/path/mytextlog.logrsync :/var/log/text.log /opt/path/mytextlog.log

2.5. Kopiowanie między serwerami

Możemy nawet użyć tych narzędzi do kopiowania między dwoma zdalnymi serwerami. Na przykład, skopiujmy plik text.log z serwera 111.111.111.111. na serwer 222.222.222.222 dla użytkownika root:

scp :/var/log/text.log :/var/logrsync :/var/log/text.log :/var/log

Gdy mamy już podstawową wiedzę na temat scp i rsync, przyjrzyjmy się im dokładniej.

scp (Secure Copy)

scp to skrót od Secure Copy i jest używany do przesyłania plików przez połączenie ssh. Jest to kopia surowa, czyli po prostu odczytuje dane z folderu źródłowego i zapisuje je w folderze docelowym. Tak więc, jeśli szukamy szybkiej kopii, która nie powinna zająć więcej niż kilka minut, powinniśmy wybrać scp.

Jeśli przesyłamy duży plik, powinniśmy upewnić się, że mamy stabilne połączenie internetowe. Ponieważ scp nie jest wznawiany, możemy stracić czas, jeśli połączenie zostanie przerwane podczas dużego transferu, a cała operacja kopiowania będzie musiała zostać ponownie uruchomiona.

3.1. Instalacja

Większość dystrybucji Linuksa posiada preinstalowany scp. Możemy łatwo sprawdzić, czy scp jest zainstalowany czy nie:

which scp

Zobaczymy ścieżkę do polecenia scp, jeśli jest już zainstalowane. Pusta odpowiedź oznacza, że scp nie jest zainstalowany.

Jeżeli jeszcze go nie mamy, to aby zainstalować scp, musimy zainstalować pakiet klienta OpenSSH z oficjalnego repozytorium pakietów:

sudo apt-get install openssh-clients # For Debian based systems like Ubuntu sudo yum install openssh-clients # For Red Hat based systems like CentOS and Fedora

Przejrzyjmy kilka typowych scenariuszy użycia scp.

3.2. Przesyłanie wielu plików

Możemy podać listę plików oddzielonych spacją, aby przesłać wiele plików:

scp text.log text1.log text2.log :/var/log

Możemy również użyć opcji -r, aby skopiować rekursywnie cały katalog. Na przykład, aby skopiować wszystkie pliki z katalogu /home/app/log/:

scp -r /home/app/log :/var/log

Możemy użyć *, aby wysłać pliki pasujące do określonego wzorca nazewnictwa. Na przykład, mamy cztery pliki text.log, text2.log, app.log i app2.log, i chcemy wysyłać tylko pliki zaczynające się od app:

scp /home/app/log/app* :/var/log

3.3. Przesyłanie plików przy użyciu plików tożsamości

Uwierzytelnianie oparte na kluczach jest preferowane w większości dystrybucji Linuksa. W poleceniu scp, możemy określić plik tożsamości używając opcji -i:

scp -i key.pem text.log :/var/log

Wielu administratorów systemu używa uwierzytelniania opartego na kluczach do transferu plików, ponieważ nie wymaga ono podawania danych uwierzytelniających użytkownika przy każdym transferze.

3.4. Kompresja w locie

Możemy zredukować czas transferu poprzez użycie kompresji w locie z opcją -C. Spowoduje to kompresję i dekompresję pliku odpowiednio na ścieżce źródłowej i docelowej:

scp -C text.log :/var/log

3.5. Ograniczenie przepustowości podczas transferu

Możemy określić przepustowość w Kbit/s za pomocą opcji -l:

scp -l 500 text.log :/var/log

3.6. Tryb verbose do debugowania

Możemy włączyć tryb verbose z opcją -v:

scp -v text.log :/var/log

Wyjście będzie wyglądało następująco:

Executing: program /usr/bin/ssh host prod-reporting-b, user jain, command scp -v -t /tmp OpenSSH_7.9p1, LibreSSL 2.7.3 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 48: Applying options for * debug1: Connecting to prod-reporting-b port 22. debug1: Connection established. ------ Transferred: sent 2856, received 2932 bytes, in 2.1 seconds Bytes per second: sent 1366.8, received 1403.1 debug1: Exit status 0

Wyjście verbose (debug) drukuje dokładne kroki wykonywane przez scp, co jest przydatne do debugowania połączeń, uwierzytelniania i problemów z konfiguracją.

rsync (Zdalna Synchronizacja)

rsync jest szybki i wszechstronny. Jest dobry do synchronizacji i inteligentnego przesyłania plików, ponieważ śledzi ile danych zostało skopiowanych i ile jeszcze pozostało.

Powinniśmy używać rsync, gdy mamy do przesłania duże pliki – nawet jeśli wystąpią problemy z połączeniem sieciowym, dane skopiowane do tego momentu nie zostaną utracone, a gdy połączenie zostanie przywrócone, kopiowanie zostanie wznowione od tego momentu.

rsync jest szybszy od polecenia scp, gdy musimy wielokrotnie przesyłać ten sam plik, ponieważ wykorzystuje protokół remote-update, który pozwala na przesyłanie tylko różnic między dwoma zestawami plików.

4.1. Instalacja

Sprawdźmy, czy rsync jest zainstalowany, wywołując go, aby pokazać jego wersję:

rsync --version

Jeśli otrzymamy błąd, wtedy możemy go zainstalować:

sudo apt-get install rsync # For Debian based systems like Ubuntu sudo yum install rsync # For Red Hat based systems like CentOS and Fedora

Przejrzyjmy się kilku typowym scenariuszom, w których możemy użyć rsync.

4.2. Do a Dry Run

Ponieważ rsync jest tak potężny, może być niebezpiecznie używać go bez sprawdzenia co ma zamiar zrobić. Na szczęście rsync udostępnia opcję -dry-run, która wykonuje próbne uruchomienie bez faktycznego przesyłania plików:

rsync --dry-run text.log :/var/log

4.3. Kopiowanie atrybutów i metadanych

rsync udostępnia opcję -a, która kopiuje dowiązania symboliczne, czasy modyfikacji, grupy, prawa własności i uprawnienia wraz z zawartością pliku.

Inną ważną opcją jest -h, która wydrukuje dane wyjściowe w formie czytelnej dla człowieka. Może to być szczególnie pomocne, gdy działa razem z opcją -dry-run:

rsync -ah --dry-run text.log :/var/log

4.4. Przesyłanie wielu plików w katalogu

Możemy podać listę plików oddzielonych spacją, aby przesłać wiele plików:

rsync text.log text1.log text2.log :/var/log

Opcja -r rekursywnie kopiuje wszystkie pliki w katalogu:

rsync -r /home/app/log :/var/log

Operator * wysyła pliki pasujące do określonego wzorca:

rsync /home/app/log/app* :/var/log

Opcję -include i -exclude możemy wykorzystać do dołączania i wykluczania plików z listy plików wewnątrz katalogu. Na przykład, aby wysłać wszystkie pliki z katalogu z wyłączeniem tych zaczynających się od 'R':

rsync --include '*' --exclude 'R*' text.log :/urs/log

4.5. Kompresja w locie

Możemy zredukować czas transferu poprzez użycie kompresji w locie z opcją -z. Spowoduje to kompresję i dekompresję pliku odpowiednio w ścieżce źródłowej i docelowej:

rsync -z text.log :/var/log

4.6. Delete Existing Files at Destination Path Before Transfer

Opcja -delete usuwa istniejące pliki z miejsca docelowego przed transferem nowych plików:

rsync --delete text.log :/var/log

4.7. Automatically Remove Source Files After Transfer

Powiedzmy, że chcemy wykonać kopię zapasową logów z serwera produkcyjnego na serwer zapasowy. W tym scenariuszu, prawdopodobnie chcielibyśmy usunąć pliki z serwera produkcyjnego po przeniesieniu wszystkich plików na nasz serwer zapasowy.

Serwerrsync udostępnia opcję -remove-source-files do usuwania plików źródłowych po zakończeniu transferu:

rsync --remove-source-files text.log :/var/log

Które narzędzie wybrać?

Możemy użyć obu tych narzędzi do przesyłania plików pomiędzy maszynami z systemem Linux. Jednakże, powinniśmy rozważyć scp, gdy rozmiar pliku jest mały – jest to proste narzędzie do kopiowania i jest szeroko dostępne. W naszym codziennym użytkowaniu, scp jest łatwym wyborem dla małych, jednorazowych transferów.

Z rsync skorzystamy najbardziej, gdy rozmiar pliku jest duży lub gdy potrzebujemy bardziej złożonej i wydajnej synchronizacji. Jest to również lepszy wybór dla powtarzających się zadań, takich jak zadania cron i skrypty.

Podsumowanie

W tym artykule przyjrzeliśmy się dwóm narzędziom do przesyłania plików: scp i rsync.

Przyjrzeliśmy się również różnicom między nimi, oraz temu, które narzędzia pasują do określonych przypadków użycia.

W tym artykule przyjrzeliśmy się dwóm narzędziom do przesyłania plików: scp i rsync.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *