![通过 ssh 进行 Rsync,或者其他什么?](https://linux22.com/image/1230151/%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9B%E8%A1%8C%20Rsync%EF%BC%8C%E6%88%96%E8%80%85%E5%85%B6%E4%BB%96%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我一直在尝试在 OSX 上使用 rsync 来同步到 Linux 或 Unix 机器,但我对此没有太多的控制权。我一直在做这样的事情
rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/
返回的错误是:
bash:rsync:未找到命令 rsync:连接意外关闭(迄今为止已接收 0 字节)[接收器] rsync 错误:未找到远程命令(代码 127)在 /SourceCache/rsync/rsync-37.3/rsync/io.c(452) [接收器=2.6.9]
然而,阅读文档后,我开始认为我实际上需要在远程主机上安装一个 rsync 守护进程。
- 我必须在远程主机上安装 rsync 服务器吗?
- 免费的替代品——GUI 或非 GUI——不需要在远程主机上安装任何东西?
谢谢!
答案1
您需要服务器上的 rsync 命令,但不需要运行守护进程。
获取在服务器上运行的 rsync 二进制文件,将其放在家里的某个地方,然后将此标志添加到您的命令行:--rsync-path=/home/user/path/to/rsync
。
如果您不想将 rsync 复制到服务器,您可以使用 scp 或 sshfs。
sshfs user@host ~/sync/user-host
rsync -av ~/local-dir ~/sync/user-host/remote-dir
在这种情况下,rsync 将完全在本地运行,但更改将传播到服务器。
答案2
您需要在远程主机上安装 rsync —— 不一定是 rsync 服务器(我相信它无论如何也不会处理 ssl 连接),但本地机器上的 rsync 需要与远程机器上的 rsync 通信。您正在使用 ssh 连接两者。
假设远程计算机中存在 rsync,但它不在您的 ssh 登录 shell 的默认搜索路径中。根据您在远程计算机中的偏好和权限,您可以尝试
- 使用 --rsync-path= 选项
- 更改远程 ssh shell 的默认 PATH
- 在远程 ssh shell 中为 rsync 添加别名
- 将执行的远程命令更改为 rsync 的绝对路径
或类似的东西。如果远程主机上不存在可执行文件(副服务器)rsync,则必须添加它。
答案3
尽管上面提出了富有创意的 sshfs 解决方案,但如果不在远程主机上运行 rsync 守护程序,那么使用 rsync 就没有什么意义。rsync 的整个高效理念是让两个实例通过在本地计算校验和来比较数据集的本地副本,通过网络进行比较,并且只传输这些文件中实际不同的部分的实际数据。
如果您使用 sshfs 或任何网络安装,它只会隐藏以下事实:它必须通过网络从远程主机复制整个数据集,以便在本地计算校验和,然后在此基础上传输差异。在本地删除所有内容并“scp -r”全部内容会更快、更便宜。
答案4
尝试SCP。由于您已经拥有 ssh 访问权限,因此无需在远程主机上安装任何其他东西 :)
要将文件从远程主机复制到本地主机,请使用:
# scp -R remoteuser@remotehost:/remote/dir /this/dir/
或者使用以下命令将文件从本地主机复制到远程主机:
# scp -R /this/dir remoteuser@remotehost:/remote/dir