Za oknem pada, to z pasami więcej w domu niż na dworze, a więc postanowiłem wykorzystać ten dzień na przygotowanie nowego serwera VPS (więcej o tym niebawem, pewnie jakoś po weekendzie), na którym już od kilku godzin działa Webinsider. Przy tej okazji korzystałem m.in. z SSH (w tym SCP dla transferu plików) oraz narzędzia/programu Rsync. I tak sobie pomyślałem, że chyba nie pisałem jeszcze o synchronizacji plików za pomocą Rsync przez SSH – a zdecydowanie warto to nadrobić, bo jest to niezwykle przydatne i dość wygodne połączenie np. przy migracji serwera (choć nie tylko).

Rsync przez SSH

Załóżmy, że mamy 2 serwery (lub komputery, nie ma znaczenia – ważne, by była dostępna usługa SSH) i chcemy skopiować dane/pliki z jednego na drugi, najlepiej z zachowaniem wszystkich właściwości plików (np. uprawnień).

Oczywiście możemy zrobić lokalnie kopię na serwerze A, choćby jako archiwum tar/gzip (możemy w ten sposób zachować właściwości plików), które następnie skopiujemy np. za pomocą WinSCP na serwer B, i tam je rozpakujemy – sam często korzystam z tej metody, choć sprawdza się ona głównie dla mniejszych ilości danych.

W sytuacji, gdy danych jest więcej (ilość lub objętość) zazwyczaj szybciej/sprawniej wyjdzie skopiować je po SSH za pomocą programu Rsync.

Z racji tego, że polecenie wygląda inaczej zależnie od tego, czy zostanie wprowadzone na komputerze źródłowym, czy docelowym, postanowiłem rozbić to na 2 oddzielne podpunkty:

Kopiowanie na zdalny serwer/komputer

Zaczniemy od sytuacji, gdy jesteśmy zalogowani na komputerze, z którego dane chcemy przesłać na inny (zdalny) serwer/komputer – w takim przypadku najprostsze polecenie będzie wyglądało np. tak:

rsync -avzl /katalog/lokalny/ -e ssh użytkownik@adres_zdalnego_serwera:/katalog/zdalny

np.:

rsync -avzl /var/www/ -e ssh [email protected]:/var/www

Natomiast w sytuacji, gdy usługa SSH na zdalnym urządzeniu działa na porcie innym niż domyślny (zalecam) musimy dodać jeszcze numer portu:

rsync -avzl /katalog/lokalny/ -e "ssh -p PORT" użytkownik@adres_zdalnego_serwera:/katalog/zdalny

np.:

rsync -avzl /var/www/ -e "ssh -p 2122" [email protected]:/var/www

Do uwierzytelnienia można również wykorzystać klucze RSA (certyfikat prywatny i publiczny), dzięki czemu można z synchronizacji Rsync po SSH korzystać również w rozwiązaniach automatycznych (skryptach).

W takim przypadku do polecenia musimy dodać jeszcze jeden parametr, ze wskazaniem klucza prywatnego, z którego chcemy skorzystać:

rsync -avzl -e "ssh -p PORT -i /ścieżka/do/klucza/prywatnego" /katalog/lokalny/ użytkownik@adres_zdalnego_serwera:/katalog/zdalny

np.:

rsync -avzl -e "ssh -p 2122 -i /home/patryk/.ssh/id_rsa" /var/www/ [email protected]:/var/www

Dalej wszystko przebiega już normalnie, czyli mamy pytanie o hasło (jeśli wymagane przy kluczu), czy kod jednorazowy (uwierzytelnienie dwuskładnikowe).

Kopiowanie na lokalny serwer/komputer

Gdy jesteśmy zalogowani na komputerze, na który chcemy skopiować dane z innego (zdalnego) serwera/komputera najprostsze polecenie będzie wyglądało np. tak:

rsync -avzl -e ssh użytkownik@adres_zdalnego_serwera:/katalog/zdalny/ /katalog/lokalny

np.:

rsync -avzl -e ssh [email protected]:/var/www/ /var/www

W sytuacji, gdy usługa SSH na zdalnym urządzeniu działa na innym porcie niż domyślny (zalecam) musimy dodać jeszcze numer portu:

rsync -avzl -e "ssh -p PORT" użytkownik@adres_zdalnego_serwera:/katalog/zdalny/ /katalog/lokalny

np.:

rsync -avzl -e "ssh -p 2122" [email protected]:/var/www/ /var/www

Po zestawieniu połączenia wystarczy podać hasło (+ ew. hasło jednorazowe przy logowaniu dwuskładnikowym) i w tym momencie powinien nastąpić transfer plików między urządzeniami.

Bez ręcznego podawania hasła

W przypadku kopiowania skryptem problemem może być konieczność podawania hasła do zdalnej maszyny. Można to rozwiązać na kilka sposobów. Najprościej będzie skorzystać z programu sshpass.

sudo apt install sshpass

Po instalacji wystarczy zmodyfikować polecenie:

sudo sshpass -p "hasło" rsync -avzl [...]

Jest to rozwiązanie proste, skuteczne, ale niekoniecznie najbezpieczniejsze, bo hasło zostanie zapisane w logach (ponoć spacja przed poleceniem pomaga).

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk