我不确定发生了什么,但最近我似乎无法从远程服务器将任何文件复制到本地。我尝试从本地进行 rsync 并收到以下错误消息:
mut@mylocalcomputer:~$ rsync -chavzP --stats [email protected]:/home/users/mut/thedirectoryIneed /User/mut/
[email protected]'s password:
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at /SourceCache/rsync/rsync-42/rsync /compat.c(61) [receiver=2.6.9]
因此我操作 rsync 并按照说明使用以下命令诊断问题(输入本地命令行):
ssh [email protected] /bin/true > out.dat
输入密码,但没有得到任何返回 - 它只是弹出一个新的提示)。
(2) 因此我尝试这样做scp
,但每次从本地scp
传输时ssh
,我都会得到以下输出,显示文件类型、大小、权限和文件名,但没有其他内容:
C0644 183 fileineedfromremoteserver.cpp
但文件没有复制过来(或者至少我在电脑的任何地方都找不到它)。
对于问题可能出在哪里,或者我还可以尝试什么,有什么建议吗?
注意:我的本地是 OSX(BSD) 上的默认终端 CLI,服务器是 GNU linux。在从服务器复制文件之前,我从未遇到过任何问题,我能想到的唯一变化是,在某个时候,我输入了命令来从本地生成 SSH 密钥(尝试自动登录服务器而不必每次都输入密码,但失败了)。不过,我怀疑这与它有什么关系。
答案1
我已经很久没有见过这个错误了,但据我所知,当我看到这个错误时,这是由于错误的 shell rc 文件中存在某些内容,导致登录时输出文本。
有问题的文件特定于您正在使用的 shell,但您可以按照以下方法针对 bash 进行修复。
登录远程系统 (mambo.m66.com) 上的帐户后,运行以下命令:(
. .bashrc
请注意,第一个句号不是拼写错误)。如果您看到任何运行该命令时的输出,您应该将.bashrc文件中的命令移动到.bash_profile中。
abydos:~ jonv$ touch sourcefile
abydos:~ jonv$ echo 'echo This should work.' > .bash_profile
abydos:~ jonv$ rsync jonv@localhost:sourcefile destfile
abydos:~ jonv$ echo 'echo This should NOT work.' > .bashrc
abydos:~ jonv$ rsync jonv@localhost:sourcefile destfile
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at /SourceCache/rsync/rsync-42/rsync/compat.c(61) [receiver=2.6.9]
如果您想进一步了解,网络上有很多资源。您可以搜索“.bashrc vs .bash_profile”,得到很多。