如果我很快通过 Rsync 从 Ubuntu PC 向 VPS 提交文件,一切顺利,但如果我从 Windows 执行同样的事情,我会收到错误
rsync:连接意外关闭(迄今为止已接收 0 个字节)
[接收器] rsync 错误:io.c(235) 处的 rsync 协议数据流 (代码 12) 错误 [接收器=3.1.3]
虽然与 Linux 不同,Rsync 不是 Windows 的默认安装,但我已在 Windows PC 上安装了 Rsync。
环境数据
- 本地 PC#1:Windows 10
- 本地 PC#2:Ubuntu 20.04.5
- VPS:Ubuntu 20.04
准备工作
我已经用清晰的 Ubuntu 初始化了 VPS。为了从方程式中消除一些变量,我做了一些出于安全原因不应该在真实(不是我的情况中的实验性)VPS 上做的事情。
- 我将使用 root 账户提交数据
- 我不会使用 SLL
此外,我还创建了/var/www/example.com目录,以避免因尚未创建目标目录而无法同步数据的错误。
目标
提交内容06-生产构建目录到 VPS。
实验流程
在 Windows 终端上,输入
rsync -azve ssh --progress 06-ProductionBuild [email protected]:/var/www/example.com
已请求密码。输入密码后得到:
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [Receiver=3.1.3]
如果我只是输入了错误的密码,则错误是Permission denied, please try again
。
现在从 Ubuntu PC 执行相同的命令:
一切都很好。
请给我一些提示。
从 WSL 尝试过 - 没问题。看起来有问题从 Windows 进行 Rsync。
答案1
ssh
显然,这是因为当您仅指定时,您将使用“系统”程序(Microsoft 的 OpenSSH 本机版本) -e ssh
。 (更准确地说,这可能是因为 (cw)rsync 安装目录的 PATH 优先级bin
低于所关注的其他路径)。
在我的测试中,最简单的解决方法是指定-e /bin/ssh
,这将利用随附的rsync
(cygwin) 。(cygwin“魔法”应该会自动为您解析路径的根,无论是否是巧克力色。)ssh
(发现原因的)功劳归于评论这里,尽管那里提供的方法似乎不必要地笨拙。(好吧,除非你有理由使用ssh
微软的版本。)
编辑:实际上,链接中给出的正确解释对我来说似乎并不完全正确。在我的测试中,“系统” ssh 确实会known_hosts
在不同的位置使用,但当我第一次尝试连接它并成功创建自己的服务器时,它也会提示我将服务器添加到列表中known_hosts
。它在后来的尝试中也没有问我,所以显然它可以找到自己的服务器来读回。因此,我不知道他的建议对他有什么帮助,而且指定选项/路径对我来说无论如何都不起作用。