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).
Spis treści w artykule
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ż[email protected]_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ż[email protected]_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" uż[email protected]_zdalnego_serwera:/katalog/zdalny/ /katalog/lokalny
np.:
rsync -avzl -e "ssh -p 2122 -i /home/patryk/.ssh/rsa_id" [email protected]:/var/www/ /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ż[email protected]_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ż[email protected]_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.

Zapraszam do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
- Themeum’s Licensing System, czyli nowy panel zarządzania kluczami licencyjnymi, m.in. dla wtyczki Tutor LMS Pro - 1970-01-01
- Czyszczenie koszyka w sklepie internetowym na WooCommerce za pomocą specjalnego argumentu w linku - 1970-01-01
- LanguageTool to świetne narzędzie do sprawdzania tekstu, które można też uruchomić na komputerze lub serwerze - 1970-01-01
Można jeszcze uruchomić rsync jako demon ;-) http://linux.die.net/man/5/rsyncd.conf
Dzięki za info, może komuś się przyda.
Mam na liście ten temat (może nie na najbliższe kilka dni, ale jest), a w tym temacie celowo pominąłem to zagadnienie, bo nie chciałem robić wpisu o samym rsyncu – świetne narzędzie, ale staram się je opisywać zawsze w jakimś kontekście (wykorzystanie do…).
Ale równie dobrze można było skorzystać z systemowego scp bez potrzeby instalacji rsync.
Pewnie, że można by wykorzystać do tej operacji samo SCP/SFTP, ale moim zdaniem – zwłaszcza przy tego typu operacjach – do tego celu zdecydowanie lepiej nadaje się rsync (lub inne narzędzie/program tego typu), niż „zwykłe kopiowanie plików” za pomocą SCP/SFTP (i pisze to, mimo, że z SCP/SFTP korzystam często, bo jest to dla mnie bezpieczniejsza forma FTP, a do tego nie muszę instalować i konfigurować kolejnej usługi – SSH i tak jest na serwerze).
I dla mnie (i chyba nie tylko) rsync jest równie systemowy co SSH/SCP, i nie bardzo nawet wyobrażam sobie bym nie miał go na serwerze :-)
Gdzie znajdę instalkę do Rsync’a? Rozumiem, że to działa jako usługa w Windowsie tak?
Zainteresowałem się tym tematem, ponieważ chcę zsynchronizować pliki z mojego lokalnego repozytorium GIT, a moim zdalnym serwerem. Czy miał Pan styczność z czymś takim?
Rsync to ogólnie program, który działa jako polecenie – od Ciebie zależy jak go wykorzystasz (polecenia wpisywane ręcznie, skrypty, harmonogram zadań, itp.). Dla systemów Windows jest kilka rozwiązań pozwalających korzystać z tego programu/narzędzia, np. cwRsync, i jeśli dobrze kojarzę, to działa (też) jako usługa.
W przypadku systemu Windows 10 możesz też skorzystać z „wbudowane Linuxa”, czyli „Linux Bash Shell”, gdzie również możemy korzystać z tego programu/polecenia (tak jak w przypadku normalnego Debiana czy Ubuntu).
Co do synchronizacji plików między Windowsem a serwerami na Linuxie, to korzystam z różnych rozwiązań, jest w śród nich również rsync, ale zazwyczaj to serwery Linuksowe odpowiadają za synchronizację, komputery z Windowsem udostępniają tylko zasoby dyskowe (ale można odwrotnie).