When following the instructions to do rsync backups given here: http://troy.jdmz.net/rsync/index.html
I get the error "protocol version mismatch — is your shell clean?"
I read somewhere that I needed to silence the prompt (PS1="") and motd (.hushlogin) displays to deal with this. I have done this, the prompt and login banner (MOTD) not longer appear, but the error still appears when I run:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Both ssh client and sshd server are using version 2 of the protocol.
What could be the problem?
[EDIT]
I have found http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html
which directs that it is sometimes necessary to "Force v2 by using the -2 flag to ssh or slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
It is not clear this solved the problem as I think I put this change in AFTER the error changed but the fact is the error has evolved to something else. I'll update this when I learn more. And I will certainly try the suggestion to run this in an emacs shell –
Best Answer
One of your login scripts (.bashrc/.cshrc/etc.) is probably outputting data to the terminal (when it shouldn't be). This is causing ssh to error when it is connecting and getting ready to copy as it starts receiving extra data it doesn't expect. Remove output that is generated in the startup scripts.
You can check if your terminal is interactive and only output text by using the following code in a bashrc. Something equivalent exists for other shells as well:
or alternatively, like this, since the special parameter
-
containsi
when the shell is interactive:For more information see: rsync via ssh from linux to windows sbs 2003 protocol mismatch
To diagnose this, make sure that the following is the output you get when you ssh in to the host:
If you get any newlines or other data you know that extra output is being sent. You could rename your .bashrc/.cshrc/.profile/etc. files to something else so that they won't output extra output. Of course there is still system files that could cause this. In that case, check with your sysadmin that the system files don't output data.