Befolgen Sie die hier angegebenen Anweisungen zum Ausführen von rsync-Sicherungen: http://troy.jdmz.net/rsync/index.html
Ich erhalte die Fehlermeldung "Protokollversion stimmt nicht überein - ist Ihre Shell sauber?"
Ich habe irgendwo gelesen, dass ich die Eingabeaufforderung (PS1 = "") und die Motd-Anzeige (.hushlogin) zum Schweigen bringen musste, um damit fertig zu werden. Ich habe dies getan, die Eingabeaufforderung und das Anmeldebanner (MOTD) werden nicht mehr angezeigt, aber der Fehler wird weiterhin angezeigt, wenn ich Folgendes ausführe:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Sowohl der ssh-Client als auch der sshd-Server verwenden Version 2 des Protokolls.
Woran könnte das liegen? Vielen Dank.
[BEARBEITEN] Ich habe http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html gefunden, das darauf hinweist, dass es manchmal notwendig ist, "v2 zu erzwingen, indem man das Flag -2 verwendet, um ssh oder slogin auszuführen
ssh -2 -i ~/.ssh/my_private_key remotemachine"
Es ist nicht klar, dass dies das Problem gelöst hat, da ich denke, dass ich diese Änderung NACH der Änderung des Fehlers in das System übernommen habe. Ich werde dies aktualisieren, wenn ich mehr erfahre. Und ich werde auf jeden Fall den Vorschlag versuchen, dies in einer Emacs-Shell auszuführen - danke.
ESC x shell
und zu tunexport TERM=xterm; ssh remotehost ls
. Wenn Steuerzeichen oder andere falsche Ausgaben angezeigt werden, müssen Sie diese suchen.--rsync-path
) ändert nichts für mich.Antworten:
Eines Ihrer Anmeldeskripte (.bashrc / .cshrc / etc.) Gibt wahrscheinlich Daten an das Terminal aus (wenn dies nicht der Fall sein sollte). Dies verursacht einen ssh-Fehler, wenn die Verbindung hergestellt und das Kopieren vorbereitet wird, da zusätzliche Daten empfangen werden, die nicht erwartet werden. Entfernen Sie die in den Startskripten generierte Ausgabe.
Sie können überprüfen, ob Ihr Terminal interaktiv ist und nur Text ausgeben, indem Sie den folgenden Code in einem bashrc verwenden. Etwas Äquivalentes gibt es auch für andere Shells:
oder alternativ wie folgt , da der spezielle Parameter
-
enthält,i
wann die Shell interaktiv ist:Weitere Informationen finden Sie unter: Rsync über SSH von Linux zu Windows SBS 2003-Protokoll stimmt nicht überein
Um dies zu diagnostizieren, stellen Sie sicher, dass das Folgende die Ausgabe ist, die Sie erhalten, wenn Sie in den Host sshen:
Wenn Sie neue Zeilen oder andere Daten erhalten, wissen Sie, dass zusätzliche Ausgaben gesendet werden. Sie könnten Ihr .bashrc / .cshrc / .profile / etc umbenennen. Dateien an etwas anderes, damit sie keine zusätzliche Ausgabe ausgeben. Natürlich gibt es immer noch Systemdateien, die dies verursachen könnten. Überprüfen Sie in diesem Fall bei Ihrem Systemadministrator, ob die Systemdateien keine Daten ausgeben.
quelle
echo
in der~/.bashrc
, Thx. Du hast meinen Tag gemachtEs gibt eine einfache Möglichkeit zu testen, ob Ihre Shell für eine ssh-Verbindung sauber ist: Führen Sie einen Befehl über die ssh-Verbindung aus, anstatt eine interaktive Shell zu starten. Der
false
Befehl wird sofort beendet, ohne dass eine Ausgabe erfolgt. Dies ist also ein guter Test:Wenn diese Befehlszeile eine Ausgabe erzeugt, ist eines Ihrer Startskripte schuld:
Eine andere Sache, um zu überprüfen, ob Sie diesen Fehler bekommen, ist, ob rsync von ssh installiert und auffindbar ist:
Wenn sich rsync nicht im Pfad befindet, wird stattdessen Folgendes angezeigt:
Sie können dies beheben, indem Sie entweder rsync installieren oder wenn es an einem ungewöhnlichen Ort installiert ist, den Ort an die rsync-Befehlszeile übergeben:
quelle
Dies wird häufig dadurch verursacht, dass die Anmeldedaten Ihrer Shell Daten auf einer nicht interaktiven Shell ausgeben. Sie können testen, ob dies der Fall ist, indem Sie folgende Schritte ausführen:
Wenn die Testdatei NICHT 0 Byte groß ist, liegt das Problem darin, dass Ihre Shell etwas ausgibt. Überprüfen Sie
/etc/profile
,.profile
,.bashrc
,.cshrc
, usw. Wenn ja, können Sie es ändern zu überprüfen , ob Ihr Terminal ist interaktiv und nur Ausgabetext , indem Sie den folgenden Code in einer bashrc verwenden. Etwas Äquivalentes gibt es auch für andere Shells:oder alternativ wie folgt , da der spezielle Parameter
-
enthält,i
wann die Shell interaktiv ist:Wenn die Testdatei tatsächlich 0 Byte groß ist, verhält sich Ihre Shell zwar so, aber es ist möglich, dass Sie nur eine sehr alte Version von rsync haben. Sie können das Client-Ende anweisen (vorausgesetzt, es ist das neuere Ende), keine so hohe Version zu bewerben, dass die alte Version von rysnc server sie nicht erkennt. Sie können dies mit der
--protocol=
Option tun . In meinem Fall hat die Verwendung--protocol=30
den Trick getan.Wenn Sie immer noch Probleme haben, versuchen Sie es mit ssh in, während der Benutzer rsysnc eine Verbindung herstellt, und versuchen Sie, ausgeführt
rsync --version
zu werden, um festzustellen, ob die Shell rsync finden kann. Wenn Sie eine Meldung erhalten, dass der Befehl nicht gefunden wurde, ist rsync möglicherweise nicht auf dem Computer installiert, zu dem Sie eine Verbindung herstellen, oder befindet sich nicht im Pfad. Rsync verfügt über Optionen zum Angeben des Pfads des Remote-Endes. Lesen Sie die Manpage (s).quelle
--protocol
welcher mein Problem mit einem 2.5.6-Server (Protokollversion 26) und einem 3.1.0-Client (Protokollversion 31)Dies ist ein Sonderfall gegenüber den anderen Antworten, der sich jedoch nicht wesentlich von diesem unterscheidet.
Um einen rsync über ssh auszuführen, benötigen Sie Shell-Zugriff in ssh, um den Remote-Befehl rsync auszuführen. Wenn Ihr ssh-Konto nur scp / sftp zulässt, können Sie das Entfernen von rsync nicht starten, und dieser Fehler tritt nicht auf.
Dies kann mit dem gleichen Befehl wie oben getestet werden
Dieser sollte scheitern und dieser sollte Erfolg haben
Dies zeigt, dass Sie nur über SFTP-Zugriff verfügen.
Wenn Sie möchten , und Berechtigungen , dies zu tun haben, können Sie die SFTP nur Zugang für den Benutzer deaktivieren, durch die Bearbeitung
/etc/ssh/sshd_config
und prüfen , obmatch
undforcecommand
Einträge.Sie können auch diesen Beitrag überprüfen
quelle
Ich habe
protocol version mismatch -- is your shell clean?
einfach bekommen, weil ich rsync am anderen Ende noch nicht installiert hatte .sudo yum install rsync
Problem gelöst.quelle
Die Eingabeaufforderung wird überhaupt nicht angezeigt, wenn ein Befehl direkt ausgeführt wird, und zwar nicht interaktiv. Ein einfaches Google zeigt das erste Ergebnis an: http://marc.info/?l=rsync&m=100263876212594&w=2 Und da die Shell möglicherweise aufgerufen werden kann, darf sie im nicht interaktiven Modus nichts anzeigen - wie bei der Eingabe von "Nur". bash "in eine vorhandene Eingabeaufforderung ein, es sollte nur die neue Eingabeaufforderung angezeigt werden.
quelle
Dies kann durch eine Anmeldemeldung auf dem Remote-Host verursacht werden, z. B. "Ihr Kennwort läuft in 6 Tagen ab", die RSYNC nicht erwartet
quelle