可能重复:
协议版本不匹配——你的 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