按照此处给出的rsync备份说明进行操作时:
http://troy.jdmz.net/rsync/index.html
@H_301_22@
您的一个登录脚本(.bashrc / .cshrc / etc.)可能正在向终端输出数据(当它不应该时).这会导致ssh在连接并准备复制时出错,因为它开始接收它不期望的额外数据.删除启动脚本中生成的输出.
我收到错误“协议版本不匹配 – 你的shell干净了吗?”
我在某处读到了我需要静默提示(PS1 =“”)和motd(.hushlogin)来处理这个问题.我这样做了,提示和登录横幅(MOTD)不再出现,但是当我运行时仍然出现错误:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
ssh客户端和sshd服务器都使用协议的版本2.
可能是什么问题呢?谢谢.
[编辑]
我找到了http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html
它指示有时需要“通过使用-2标志来强制v2 ssh或slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
目前尚不清楚这是否解决了这个问题,因为我认为我在更改错误之后将此更改置于事实上,但事实是错误已经演变为其他问题.当我了解更多信息时,我会更新此信息.我一定会尝试在emacs shell中运行它的建议 – 谢谢.
您可以通过在bashrc中使用以下代码来检查终端是否是交互式的,并且只输出文本.其他shell也存在等价物:
if shopt -q login_shell; then [any code that outputs text here] fi
或者,像这样,因为特殊参数 – 当shell是交互式时包含i:
if echo "$-" | grep i > /dev/null; then [any code that outputs text here] fi
有关更多信息,请参阅:rsync via ssh from linux to windows sbs 2003 protocol mismatch
USER@HOSTNAME's password: Last login: Mon Nov 7 22:54:30 2011 from YOURIP [USER@HOSTNAME ~]$
如果您获得任何换行或其他数据,您就会知道正在发送额外的输出.您可以重命名.bashrc / .cshrc / .profile / etc.将文件转换为其他内容,以便它们不会输出额外的输出.当然,仍有系统文件可能导致此问题.在这种情况下,请与您的系统管理员核实系统文件不输出数据.