通过 ssh 从 Linux 到 Windows sbs 2003 进行 rsync 协议不匹配

通过 ssh 从 Linux 到 Windows sbs 2003 进行 rsync 协议不匹配

可能重复:
协议版本不匹配——你的 shell 干净吗?

我正在尝试将我的 Linux Web 服务器备份到办公室的本地 Windows SBS 2003 服务器。我已经在 Windows 服务器上设置了 ssh 和 cwrsync,并确认 Linux 服务器可以通过以下命令访问 Windows 服务器:

远程控制[电子邮件保护]

它要求输入密码并连接正常。但是当我运行此命令来启动备份时:

rsync -avz -e ssh 主页/帐户/public_html/some/small/目录/ [电子邮件保护]:/cygdrive/c/备份/目标/目录/

输入密码后出现此错误:

协议版本不匹配--你的shell干净吗?

然后它就死了。

这是什么意思?我该如何解决?

答案1

该错误protocol version mismatch -- is your shell clean?意味着本地 rsync 从远程机器获取了一些不属于 rsync 协议的无效数据。

这通常是由自动 shell 登录消息引起的,例如每日讯息/etc/motd),因此是该is your shell clean?部分。

手动登录此计算机并查看是否收到任何此类消息。为了rsync正常工作,您应该只获得远程命令行提示符。如果收到消息,请尝试禁用它。查看您的 shell 配置文件(例如~/.bashrc/etc/bash.bashrc对于 bash shell),看看它们是否包含任何产生此输出的命令。

答案2

您的某个登录脚本(.bashrc/.cshrc/等)可能在不应该输出数据时向终端输出数据。这会导致 ssh 在连接并准备复制时出错,因为它开始接收它不期望的额外数据。删除启动脚本中生成的输出。

您可以在 bashrc 中使用以下代码来检查您的终端是否是交互式的并且仅输出文本。其他 shell 也存在等效的东西:

if shopt -q login_shell; then
    [any code that outputs text here]
fi

相关内容