无法通过 Rsync 将文件从 Windows 终端提交到 Ubuntu VPS(代码 12 错误),而正常的 SSH 身份验证可以正常工作

无法通过 Rsync 将文件从 Windows 终端提交到 Ubuntu VPS(代码 12 错误),而正常的 SSH 身份验证可以正常工作

虽然 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

  1. 确保您的rsync和(工作)ssh来自同一来源。或者至少它们是兼容的。它们必须一起工作。如果您的rsync来自 WSL,请确保您ssh也安装了 WSL 的客户端,并且您的$PATH在 Windows 目录之前指定了 WSL 目录。

  2. 看起来您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}

相关内容