SCP vs RSYNC

SCP vs RSYNC

Poziom trudności
2.5/5

Testowanie urządzeń, do których mamy dostęp po sieci jest ciekawym zagadnieniem. Jednak jak to często bywa z ciekawymi zagadnieniami, możemy napotkać wiele problemów. Jednym z nich jest kopiowanie plików pomiędzy dwoma hostami. Prędzej czy później będziemy się musieli zmierzyć. Nie jest tutaj ważne, czy będą to obrazy, pliki tekstowe z logami czy może kod programu. We wszystkich powyższych przypadkach będziemy mogli się posłużyć tymi samymi narzędziami. Poniżej opiszę wybrane dwa: scp (Secure CoPy) oraz rsync (Remote SYNChronization). Które będzie Wam bardziej pasowało — zdecydujecie sami. A może każde użyjecie do innych zastosowań?

SCP

Zacznijmy może od scp. Protokół secure copy bazuje na protokole SSH oraz narzędzia cp. Jak można wywnioskować, narzędzie do komunikacji między hostami wykorzystuje standardowy port SSH, czyli 22, jednak podczas użytkowania można go ręcznie zmienić, co umożliwia przesyłać pliki na dowolnym porcie, co czyni narzędzie bardziej uniwersalnym. Kolejną ważną cechą scp jest fakt, że do transferu jest wykorzystywane bezpieczne, szyfrowane połączenie. Co ciekawe poleceniem scp możemy z powodzeniem kopiować pliki także w obrębie jednej maszyny.

Ważniejsze parametry:
-3 — w przypadku przesyłania plików pomiędzy dwoma zdalnymi hostami, pliki będą wysyłane przez naszą maszynę. Przydatne w sytuacji, gdy hosty nie widzą siebie nawzajem, a z prespektywy naszej maszyny są widoczne.
p — zachowanie atrybutów, takich jak czasy dostępów oraz zmian z oryginalnego pliku
P — port, po którym następuje wysyłanie
-q — tryb cichy, który ogranicza wyświetlanie komunikatów do minimum
-v — tak zwany tryb verbose(wyświetlanie informacji debug‚owych), czyli przeciwieństwo parametru -q
r — kopiowanie rekursywne — ten parametr jest wymagana podczas kopiowania całych folderów
-l — ustawianie bandwitch’a, czyli limitu transferu przesyłu w Kbit/s. Przydatne w bardzo obciążonych sieciach.

Przykłady użycia

1. Przesyłanie w obrębie jednego hosta z parametrem -v – scp wywoła narzędzie cp:

qabrio@test:~/scp_example$ scp -v example.sh example_new.sh
Executing: cp '--' 'example.sh' 'example_new.sh'

2. Przesyłanie do zdalnego hosta, ze zmianą nazwy pliku:

qabrio@test:~/scp_example$ scp example.sh pi@192.168.1.15:example5.sh
pi@192.168.1.15's password:
example.sh 100% 0 0.0KB/s 00:00

3. Przesyłanie ze zdalnego hosta:

qabrio@test:~/scp_example$ scp pi@192.168.1.15:example5.sh ./
pi@192.168.1.15's password:
example5.sh 100% 0 0.0KB/s 00:00

4. Przesyłanie pomiędzy zdalnymi hostami (na maszynie docelowej zostanie umieszczony w katalogu domowym użytkownika pi):

qabrio@test:~/scp_example$ scp -3 pi@192.168.1.15:example5.sh pi@192.168.1.33:
pi@192.168.1.33's password: pi@192.168.1.15's password:
raspberry

5. Kopiowanie plików na zdalnej maszynie — tutaj niestety scp nam nie pomoże, jednak przy okazji podam komendę do wykonania tej czynności, z wykorzystaniem protokołu ssh:

qabrio@test:~/scp_example$ ssh pi@192.168.1.15 cp example5.sh example6.sh
pi@192.168.1.15's password:

Do punktu czwartego należy dodać kilka słów komentarza, dlatego że trzeba tu pamiętać o kilku rzeczach. Jeśli do obu hostów jest wymagane uwierzytelnianie za pomocą hasła, należy skorzystać z opcji -3, czyli wysłać dane przez naszą maszynę. Wtedy napotkamy na znany błąd w scp, czyli zostaniemy raz, jednocześnie poproszeni o dwa hasła, jak to widać w poprzednim przykładzie. Aby poprawnie uwierzytelnić hosty, należy podać najpierw hasło do pierwszej maszyny z zapytania, w naszym przypadku pi@192.168.1.33, a następnie po wciśnięciu przycisku enter, do drugiego hosta, czyli tutaj 192.168.1.15. Jak łatwo zauważyć, drugie hasło jest wprowadzane jawnie(!!!), czyli jeśli ktoś nam zagląda przez ramię, pozna nasze hasło do tego hosta.

RSYNC

Rsync jest narzędziem zdalnej, jednokierunkowej synchronizacji dwóch katalogów, z zaznaczeniem, że te katalogi mogą się znajdować na różnych hostach. Narzędzie działa domyślnie na porcie 873, dlatego też należy wcześniej zadbać, aby ten port był otwarty. Samo funkcjonowanie opiera się na zasadzie serwer-klient, gdzie pierwszy podana lokalizacja funkcjonuje jako serwer, natomiast druga jako klient. W przypadku tego narzędzia używamy określenia synchronizacja, dlatego, że nie kopiuje ono bezmyślnie plików, lecz najpierw sprawdza, czy taki plik już istnieje na serwerze docelowym, a następnie jeśli został on zmieniony, to go synchronizuje.

Na początek może lista ważniejszych parametrów:
-q tryb cichy, który ogranicza wyświetlanie komunikatów do minimum
-v tak zwany tryb verbose(wyświetlanie informacji debug‚owych)
r synchronizacja katalogów — ta flaga jest praktycznie zawsze dodawana
-d synchronizacja katalogów, lecz bez rekursynwości (bez synchronizacji podkatalogów)
-l synchronizacja symlinków
-t zachowanie czasów modyfikacji
n synchronizacja testowa — nie wprowadza zmian ani na serwerze, ani w lokalizacji docelowej
-z kompresuje dane podczas transferu
p zachowanie uprawnień
-e ustawienie zdalnej powłoki
delete usunięcie plików na kliencie, których nie ma na serwerze.

Przykłady użycia

1. Synchronizacja katalogu client z katalogiem server w obrębie jednej maszyny:

qabrio@test:~$ rsync -rv server/ client
sending incremental file list
test_file1
test_file2
test_file3
sent 220 bytes received 73 bytes 586.00 bytes/sec
total size is 0 speedup is 0.00

2. Testowa synchronizacja lokalnego katalogu client ze zdalnym katalogiem server, z usunięciem nadmiarowych plików w katalogu client. Dzięki użyciu flagi -n, żadne fizyczne zmiany na serwerze ani kliencie nie zostały wykonane:

qabrio@test:~$ rsync -anvz --delete -e ssh pi@192.168.1.15:server/ client
pi@192.168.1.15's password:
receiving incremental file list
deleting test_file3
deleting test_file2
deleting test_file1
./
file_1
file_2
file_3
sent 36 bytes received 114 bytes 42.86 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

3. Synchronizacja zdalnego folderu client z lokalnym katalogiem server:

qabrio@test:~$ rsync -av --delete -e ssh server/ pi@192.168.1.15:client
pi@192.168.1.15's password:
sending incremental file list
./
file_1
file_2
file_3
sent 183 bytes received 38 bytes 63.14 bytes/sec
total size is 0 speedup is 0.00

Jak widzimy zarówno jedno jak i drugie narzędzie jest stosunkowo proste w obsłudze, dlatego warto zaznajomić się z użytkowaniem ich obu. Pomimo, że jednym i drugim narzędziem możemy osiągnąć podobne rezultaty, warto zauważyć, że rsync jest szczególnie polecany do tworzenia kopii zapasowych (czyli tak zwanych backup’ów), a także pełnej synchronizacji dwóch folderów, natomiast do standardowego kopiowania lepszym wyborem będzie scp.

Dodaj komentarz