Pliki Rsync za pośrednictwem hosta pośredniego

22

Obecnie jestem z dala od mojej sieci LAN i muszę wykonać kopię zapasową laptopa. Mam nieco nową kopię mojego laptopa na serwerze i zwykle tworzę kopię zapasową za pomocą rsync. Teraz chcę to zrobić, ale poza moją siecią LAN.

Krótko mówiąc, chcę wysłać dane z A do C przez B, gdzie A to mój laptop, B mój router, a C mój serwer.

Znalazłem to polecenie A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination:, to działa dobrze do przesyłania plików przez scp - ale ponieważ mam już większość danych na moim serwerze, chcę używać rsync tylko do synchronizacji delty.

Próbowałem: A$ rsync file -e 'ssh B ssh' Ci działa tak długo, jak pojawi się monit o podanie hasła dla użytkownika: C. Jednak po wprowadzeniu hasła nic się nie dzieje. Na routerze jest uruchomiony Tomato v1.28 i nie mogę go skonfigurować do korzystania z pliku konfiguracyjnego ssh, aby umożliwić mu zalogowanie się na C bez hasła.

Wszelkie pomysły na to, jak to zrobić?

GLADER
źródło
2
użyj tego samego ProxyCommandw pliku konfiguracyjnym. Rsync powinien to odebrać.
Jakuje,

Odpowiedzi:

30

Na to pytanie zasadniczo udzielono odpowiedzi gdzie indziej, w tym tutaj dla scp i tutaj dla rsync . Ponieważ ta ostatnia zawiera moją odpowiedź, ale żadna odpowiedź nie została zaakceptowana, powtórzę ją tutaj.

Jak można zauważyć, można użyć rsync„s -e | --rshopcję, ale to będzie trochę bardziej skomplikowane:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

Lub, jeśli twoja wersja sshjest wystarczająco nowa (OpenSSH> = v7.3), możesz użyć opcji -J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Należy zauważyć, że używam -A(przekierowanie agenta), ale należy również praca z uwierzytelniania hasłem, jeśli nie używać klawiszy, i, oczywiście, można zastąpić proxyz Bi destze Cw swoim przykładzie.

Jeśli przypadkiem nie masz wystarczająco nowej sshwersji (> = 5.3, IIRC), netcatzamiast -Wopcji możesz użyć opcji ssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Wreszcie, jak już wspomniano w komentarzach, możesz umieścić plik ProxyCommandw swoim $HOME/.ssh/configpliku, abyś nie musiał mieć tak skomplikowanej linii poleceń. W szczególności dodaj coś takiego:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Lub przy użyciu ProxyJumpOpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Następnie powinieneś być w stanie zrobić:

rsync -azv foo/ C:./foo/
szkarłatna czapla
źródło