2009-04-08 9 views
9

Próbuję rsync plików pomiędzy dwoma serwerami zrsync'ing plików między dwoma zdalnymi serwerami, pojawiają się błędy stwierdzające komendy rsync nie znajdują się na zdalnym serwerze

rsync -avlzp /source [email protected]:/destination 

ale zamiast tego pojawiają się błędy stwierdzające

bash: rsync: command not found 
rsync: connection unexpectedly closed (0 bytes received so far) [sender] 
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [sender=3.0.2] 

ale rsync jest zainstalowany na obu serwerach. Co ja robię źle? Próbowałem również

rsync -av -e "ssh -l ssh-user" /source server:/destination 

z tym samym wynikiem.

Ja głównie próbuje użyć rsync tak, że tylko wtedy, gdy istnieją kopie ponad różnicami ...

Dzięki

Odpowiedz

15

rsync może być w drodze na zdalnej maszynie podczas pracy interaktywną powłokę, ale nie podczas uruchamiania rsync przez ssh (z nieinteraktywną powłoką). .bashrc jest normalnie uruchamiany tylko w przypadku powłok interaktywnych, więc jeśli twoja ścieżka jest tam zdefiniowana, nie zostanie przeanalizowana, gdy uruchomimy rsync --server na zdalnym końcu. Spróbuj/etc/profile. Aby uzyskać więcej informacji, patrz bash(1).

Możesz użyć --rsync-path, aby określić ścieżkę do pliku binarnego rsync na zdalnym komputerze.

+0

Dzięki za to. Użycie '--rsync-path' sprawiło, że działało to dla mnie. – Lightbulb1

7

Istnieje wiele dobrych informacji na temat tego problemu, w tym powyższej odpowiedzi. Ale w moim przypadku jestem administratorem zarówno na komputerze źródłowym, jak i docelowym, i chciałem zrozumieć, co się dzieje i jakie "prawidłowe" opcje konfiguracji sprawią, że problem zniknie. Nie odniosłem pełnego sukcesu, ale wydaje się prawdopodobne, że inni mogą uznać te informacje za przydatne.

Jako odpowiedź powyżej stwierdza, rsync może znajdować się na ścieżce na zdalnym komputerze podczas uruchamiania powłoki interaktywnej, ale nie podczas uruchamiania rsync przez ssh. Jak zauważa w http://siddesh-bg.blogspot.com/2009/02/rsync-command-not-found-error-even.html Siddesh ten może być rozwiązany poprzez wyraźne określenie ścieżki do zdalnego rsync z lokalnego skorupy:

rsync -av --rsync-path=/usr/local/bin/rsync -e "ssh -l ssh-user" /source server:/destination 

Ale jako administrator chciałem, aby rozwiązać problem, a nie po prostu obejść. OldSchool napisali użyteczne podejście rozwiązywania problemów w https://groups.google.com/group/comp.unix.solaris/browse_thread/thread/0a06a4d382d752d8?pli=1

On sugeruje się dowiedzieć, co skorupa prowadzony jest dla ciebie na komputerze zdalnym, a następnie co PATH została założona tam:

ssh [email protected] 'echo $SHELL' 
ssh [email protected] 'echo $PATH' 

Tom Feiner ma ładny posta pod adresem Why does an SSH remote command get fewer environment variables then when run manually? omawiającym ustanowienie środowiska powłoki powłoki poleceń SSH.

OldSchool zwrócił także uwagę, że "man sshd_config" dostarcza informacji o tym, jak sesja ssh uzyskuje środowisko. Ustawienie sshd_config "PermitUserEnvironment" można ustawić, aby umożliwić użytkownikowi ~/.ssh/environment po stronie serwera, a opcje środowiska w pliku AuthorizedKeysFile były przetwarzane przez sshd. Wartością domyślną jest nie.

Dzięki domyślnym ustawieniom sshd_config ścieżka będzie budowana przez domyślną powłokę. Jeśli twoje polecenie ssh zażąda sesji interaktywnej (ssh użytkownik @ host), to na serwerze zdalnym domyślna powłoka zrobi interaktywne logowanie, które prawdopodobnie spowoduje oczekiwaną ścieżkę.Ale jeśli inicjujesz sesję ssh dla rsync (rsync -av --rsync-path =/usr/local/bin/rsync -e "ssh -l ssh-user"/serwer źródłowy:/docelowy) to serwer zdalny daje masz powłokę wykonywania poleceń SSH, która jest nieinteraktywną powłoką. W moim przypadku zdalna nieinteraktywna powłoka (bash) nie wykonuje/etc/profile, ponieważ robi to tylko dla interaktywnych powłok lub nieinteraktywnych powłok z opcją --login. mogę zmusić go tak:

ssh [email protected] 'echo $PATH;source /etc/profile;echo $PATH' 

Studiowałam również "SSH Secure Shell" Daniel Barrett & Richard Silverman za (O'Reilly 2001) i ustawić ścieżkę w pliku/etc/ssh/sshrc że miałem nadzieję, uczyniłoby rsync dostępny dla powłok poleceń wykonywania poleceń SSH, ale/etc/ssh/sshrc jest wykonywany przed wywołaniem powłoki lub polecenia użytkownika i najwyraźniej jego środowisko nie jest przekazywane do tej powłoki lub polecenia.

W tym momencie mam zamiar być zadowolony z opcji wiersza polecenia rsync, tj

rsync -av --rsync-path=/usr/local/bin/rsync -e "ssh -l ssh-user" /source server:/destination 

bo obawiam się, że jeśli zmienię ustawienie sshd_config „PermitUserEnvironment” to będę prawdopodobnie nie zabezpieczenie audyt na moich serwerach. Mogę to powtórzyć po tym, jak mam więcej doświadczenia z audytami bezpieczeństwa naszej organizacji.

Powiązane problemy