Ci sono molte buone informazioni su questo problema, inclusa la risposta sopra. Ma nel mio caso, sono un amministratore sia delle macchine di origine che di destinazione e volevo capire cosa stava succedendo e quali "giuste" opzioni di configurazione avrebbero risolto il problema. Non ho avuto pieno successo ma sembra probabile che altri possano trovare utili queste informazioni.
Come la risposta precedente afferma, rsync potrebbe trovarsi nel percorso sulla macchina remota quando si esegue una shell interattiva, ma non quando si esegue rsync tramite ssh. Come Siddesh nota a http://siddesh-bg.blogspot.com/2009/02/rsync-command-not-found-error-even.html questo può essere risolto specificando esplicitamente il percorso del rsync distanza dalla shell locale:
rsync -av --rsync-path=/usr/local/bin/rsync -e "ssh -l ssh-user" /source server:/destination
Ma come amministratore ho voluto risolvere il problema, non solo lavorare intorno ad esso. OldSchool inviato un approccio di risoluzione dei problemi utile a https://groups.google.com/group/comp.unix.solaris/browse_thread/thread/0a06a4d382d752d8?pli=1
egli suggeriamo di scoprire che cosa shell è in esecuzione per voi sulla macchina remota, allora quale strada è stata stabilita lì:
ssh [email protected] 'echo $SHELL'
ssh [email protected] 'echo $PATH'
Tom Feiner ha un bel post a Why does an SSH remote command get fewer environment variables then when run manually? che discute la definizione dell'ambiente della shell di esecuzione del comando SSH.
OldSchool ha anche osservato che "man sshd_config" fornisce alcune informazioni su come una sessione ssh ottiene un ambiente. L'impostazione sshd_config "PermitUserEnvironment" può essere impostata in modo che l'utente ~/.ssh/environment sul lato server e le opzioni di ambiente nel file AuthorizedKeysFile vengano elaborate da sshd. L'impostazione predefinita è no.
Quindi con le impostazioni sshd_config predefinite il percorso verrà creato dalla shell predefinita. Se il comando ssh richiede una sessione interattiva (ssh user @ host), sul server remoto la shell predefinita eseguirà un accesso interattivo, che probabilmente determinerà il PERCORSO che ci si aspetta.Ma se stai iniziando una sessione ssh per rsync (rsync -av --rsync-path =/usr/local/bin/rsync -e "ssh -l ssh-user"/source server:/destination) allora il server remoto una shell di esecuzione del comando SSH che è una shell non interattiva. Nel mio caso, la shell remota non interattiva (bash) non sta eseguendo/etc/profile, perché lo fa solo per shell interattive o shell non interattive con l'opzione --login. Potrei forzare in questo modo:
ssh [email protected] 'echo $PATH;source /etc/profile;echo $PATH'
ho anche studiato "SSH Secure Shell" di Daniel Barrett & Richard Silverman (O'Reilly 2001) e impostare un percorso in/etc/ssh/SSHRC che speravo avrebbe fatto rsync è disponibile per le shell di esecuzione dei comandi SSH, ma,/etc/ssh/sshrc viene eseguito prima che venga invocata la shell o il comando degli utenti, e apparentemente l'ambiente non viene passato a quella shell o comando.
A questo punto ho intenzione di essere soddisfatti con l'opzione della riga di comando rsync, vale a dire:
rsync -av --rsync-path=/usr/local/bin/rsync -e "ssh -l ssh-user" /source server:/destination
perché io sono preoccupato del fatto che se cambio l'impostazione sshd_config "PermitUserEnvironment" allora io probabilmente non riuscire un titolo verifica sui miei server. Potrei riesaminarlo dopo aver acquisito maggiore esperienza con gli audit di sicurezza della nostra organizzazione.
Grazie per questo. Usare '--rsync-path' ha funzionato per me. – Lightbulb1