rsync "protocol incompatibility" caused by --dry-run
When trying to move a working script to a different machine and a different user-account, my rsync-script failed with this message:
rsync error: protocol incompatibility (code 2) at io.c(1332) [sender=3.0.8] rsync: connection unexpectedly closed (2668 bytes received so far) [receiver] rsync error: error in rsync protocol data stream (code 12) at io.c(601) [receiver=3.0.7] rsync: connection unexpectedly closed (70 bytes received so far) [generator] rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]
Now in this special constellation, there are many possible reasons, since the machines are quite different:
Server: Fedora 13, x86_64, openssh 5.4p1, rsync version 3.0.8 protocol version 30
Old client: Mageia 1, i686, openssh 5.8p1, rsync version 3.0.8 protocol version 30
New Client: Debian Squeeze, armv5tel, openssh 5.5p1, rsync version 3.0.7 protocol version 30
To make a long story short: The error message is absolutely misleading. The error is not caused by a protocol incompatibility, but simply by my forced command. And the error is simply triggered by using --dry-run.
Explanation
When running rsync with --dry-run, obviously the command, which is send to the server, differs. Now the SSH-Server drops the connection, since the received command does not match the forced command. rsync get communication errors which it is misinterpreting and talking about "protocol incompatibility".