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.
Dzięki za to. Użycie '--rsync-path' sprawiło, że działało to dla mnie. – Lightbulb1