Rsync przez ssh z dostępem root po obu stronach

14

Mam jeden starszy serwer Ubuntu i jeden nowszy serwer Debian i migruję dane ze starego na nowy. Chcę używać rsync do przesyłania danych, aby końcowa migracja była łatwiejsza i szybsza niż równoważny proces tar / scp / untar.

Na przykład chcę zsynchronizować foldery domowe pojedynczo z nowym serwerem. Wymaga to dostępu do konta root na obu końcach, ponieważ nie wszystkie pliki po stronie źródłowej są czytelne dla całego świata, a miejsce docelowe musi być zapisane z prawidłowymi uprawnieniami do / home. Nie mogę wymyślić, jak dać dostęp do roota rsync po obu stronach.

Widziałem kilka powiązanych pytań, ale żadne z nich nie pasuje do tego, co próbuję zrobić.

Mam sudo skonfigurowane i działające na obu serwerach.

Tim Abell
źródło

Odpowiedzi:

14

W rzeczywistości NIE musisz zezwalać na uwierzytelnianie roota przez SSH, aby uruchomić rsync, jak sugeruje Antoine. Transport i uwierzytelnianie systemu można wykonać całkowicie na kontach użytkowników, o ile można uruchomić rsync z sudo na obu końcach w celu odczytu i zapisu plików.

Jako użytkownik na serwerze docelowym możesz wyssać dane z serwera źródłowego w następujący sposób:

sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/

Użytkownik uruchamiany na obu serwerach będzie potrzebował dostępu bez hasła * sudo do pliku binarnego rsync, ale NIE trzeba włączać logowania ssh jako root w dowolnym miejscu. Jeśli używany użytkownik nie pasuje na drugim końcu, możesz dodać użytkownika @ boron: w celu określenia innego użytkownika zdalnego.

Powodzenia.

* lub konieczne będzie ręczne wprowadzenie hasła w oknie limitu czasu.

Caleb
źródło
5
Chociaż jest to stare pytanie, chciałbym dodać słowo PRZESTROGA do tej zaakceptowanej odpowiedzi. Z mojego zrozumienia, zezwolenie na hasło „sudo rsync” bez hasła jest równoznaczne z otwarciem konta root do zdalnego logowania. Jest tak, ponieważ dzięki temu bardzo łatwo można uzyskać pełny dostęp do katalogu głównego, np. Ponieważ wszystkie pliki systemowe można pobrać, zmodyfikować i zastąpić bez hasła.
Ascurion
3

Jeśli Twoje dane nie są szczególnie wrażliwe, możesz użyć tari socat. Z mojego doświadczenia wynika, że ​​często jest to szybsze niż rsyncw przypadku ssh.

Potrzebujesz socatlub netcatpo obu stronach.

Na hoście docelowym przejdź do katalogu, w którym chcesz umieścić swoje dane, po tym uruchomieniu:
socat TCP-LISTEN:4444 - | tar xzf -

Jeśli host docelowy nasłuchuje, uruchom go w źródle, takim jak:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444

Do tej konfiguracji potrzebujesz niezawodnego połączenia między 2 serwerami.

zagyi
źródło
Słuszna uwaga. W zaufanym środowisku nabierzesz dużej prędkości, nie szyfrując. Może to nie mieć znaczenia w przypadku małych plików, ale będzie to miało miejsce w przypadku GB danych.
pboin
2

Ok, zebrałem wszystkie wskazówki, aby uzyskać coś, co działa dla mnie.

Nazwijmy serwery „src” i „dst”.

Skonfiguruj parę kluczy dla roota na serwerze docelowym i skopiuj klucz publiczny na serwer źródłowy:

dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:

Dodaj klucz publiczny do autoryzowanych kluczy root na serwerze źródłowym

src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys

Z powrotem na serwerze docelowym przeciągnij dane za pomocą rsync:

dest $ sudo -i
dest # rsync -aP src:/home/fred /home/
Tim Abell
źródło