Als ich ein Script testen wollte, das ein Verzeichnis mit rsync und ssh von Server1 auf Server2 spiegeln sollte, verweigerte rsync seinen Dienst mit folgender Fehlermeldung:
protocol version mismatch — is your shell clean?
rsync error: protocol incompatibility (code 2) at compat.c(171) [receiver=3.0.4]
Eine Webrecherche brachte die Lösung des Problems. Eigentlich hätte man mit der Fehlermeldung „is your shell clean?“ selbst darauf kommen können.
Auf dem Server, auf den ich mit rsync zugreifen wollte, befand sich ein Startskript .bashrc mit folgendem Eintrag:
LOGINSTATION=`who | cut -d“(“ -f2 | cut -d“)“ -f1`
echo Login von: $LOGINSTATION
Dieses Skript produzierte bei einem Login eine Ausgabe wie diese:
Login von: 11-66-100-10-dynip.superkabel.de
Diese Meldung brachte nun RSYNC aus dem Tritt. Anscheinend setzt rsync eine Loginshell ohne zusätzliche Meldungen vorraus. Deshalb auch die Fehlermeldung: “is your shell clean?”
Wenn die Meldung aus der .bashrc entfernt wird, funktionierte RSYNC wieder wie gewohnt.