当远程 rsync 在路径中时,rsync 需要 rsync-path

当远程 rsync 在路径中时,rsync 需要 rsync-path

我很困惑为什么即使远程 rsync 在路径中,rsync 也需要 --rsync-path 标志。

考虑:

$ rsync -avze 'ssh -p 22' --delete public/ [email protected]:~/public_html
bash: /usr/local/bin/rsync: No such file or directory
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: remote command not found (code 127) at io.c(601) [sender=3.0.7]

然后我尝试添加--rsync-path

$ rsync -avze 'ssh -p 22' --rsync-path=/usr/bin/rsync  --delete public/ [email protected]:~/public_html
sending incremental file list
...

因此,第一个 rsync 未成功,因为它正在 /usr/local/bin 中搜索 rsync,但是,只要我使用 --rsync-path 传递 rsync 的明显路径,它就可以工作。

这是为什么?(此命令行是 octopress 中 rake deploy 发出的)

答案1

我现在对此的记忆已经很模糊了,但发生这种情况的原因是我在某个时候在 rsync 上使用 GNU stow 并创建了一些混淆rsyncs 位置的符号链接。经过一番折腾,终于解决了这个问题。现在我的头发少了很多,但另一方面,我有一个可以正常工作的rsync。如果你问我,那一定是个胜利。

答案2

rsync 连接到远程 sshd,它通常使用静态 PATH 进行编译(检查 sshd_config 文件上的注释)。

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

可能你的 rsync 不在该路径上。

这是运行远程命令时使用的 PATH,与运行交互式 ssh 远程登录 shell 时从点文件获取的 PATH 环境不同。

您可以通过运行以下命令进行检查:

ssh <remote-host> 'echo $PATH'

并将其与你执行后得到的结果进行比较:

ssh <remote-host>

# prompt on remote host
> echo $PATH

相关内容