虽然 Rsync 适用于 Windows,但 SSH 存在一些问题。以下是第一:由于不清楚的错误“rsync 协议数据流错误(代码 12)”,文件根本无法提交。如果指定-e /bin/ssh
选项,则可以提交文件,但前提是远程(例如 VPS)具有密码验证。然而,在真正的 VPS 中,使用 SSH 密钥和禁用密码验证是基本的安全要求。因此,下一个问题是如何在不明确指定 SSH 密钥路径的情况下通过 Rsync 提交文件(这对于自动化很重要)。
准备工作
我已将生成的密钥数据添加到/.ssh/配置:
Host 160.XXX.XXX.97(deployer)
HostName 160.XXX.XXX.97
User deployer
IdentityFile ~/.ssh/JXXXXXX-HomePage
为了避免每次输入密码,需要启动 ssh-agent:
sss config ssh-agent start=auto
实验流程
步骤 1. 从 PowerShell 检查正常的 SSH 身份验证
感谢 ssh-agent,麻烦变得很少:
ssh [email protected]
工作正常。
步骤 2. 从 WSL 检查 SSH 身份验证是否正常
相同命令:
工作正常。
步骤3.检查Rsync + WSL提交文件
rsync -azve ssh 04-ProductionBuild [email protected]:/var/www/example.jp
运行良好。现在我已证明问题不在 VPS 方面。
步骤 4. 从 Windows 使用 Rsync 提交文件
rsync -azvr -e /bin/ssh --progress ./04-ProductionBuild/ [email protected]:/var/www/example.jp
无法确定主机“160.XXX.XX.97 (160.XXX.XX.97)”的真实性。ED25519 密钥指纹为 SHA256:NFthXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTG/Y。此密钥没有其他名称。
您确定要继续连接吗(是/否/[指纹])?
在开始实验之前,VPS 已经添加到已知主机列表中,并且 SSH 认证正常,如果输入yes
,则会报错:
无法将主机添加到已知主机列表 (/known_hosts)。160.XXX.XX.97 端口 22 关闭连接
rsync:连接意外关闭(目前已接收 0 个字节)[发送方]
rsync 错误:io.c(231) 处的 rsync 协议数据流 (代码 12) 错误 [发送方=3.2.7]
答案1
确保您的
rsync
和(工作)ssh
来自同一来源。或者至少它们是兼容的。它们必须一起工作。如果您的rsync
来自 WSL,请确保您ssh
也安装了 WSL 的客户端,并且您的$PATH
在 Windows 目录之前指定了 WSL 目录。看起来您
ssh
无法查找您的主目录 - 请参阅错误消息Failed to add the host to the list of known hosts (/known_hosts)
,其中包含文件路径错误~/.ssh/known_hosts
。尝试使用文件
ssh -o 'UserKnownHostsFile=${HOME}/.ssh/known_hosts' remoteHost…
的明确绝对路径来修复它,或者甚至使用它known_hosts
。(注意:这里单引号是正确的,因为要求用花括号写环境变量。${HOME}
)