it-swarm.com.de

Nicht übereinstimmende Protokollversion - Ist Ihre Shell sauber?

Befolgen Sie die hier angegebenen Anweisungen zum Ausführen von Rsync-Sicherungen: http://troy.jdmz.net/rsync/index.html

Ich erhalte die Fehlermeldung "Nicht übereinstimmende Protokollversion - ist Ihre Shell sauber?"

Ich habe irgendwo gelesen, dass ich die Anzeigen Prompt (PS1 = "") und motd (.hushlogin) zum Schweigen bringen musste, um damit fertig zu werden. Ich habe dies getan, das Eingabeaufforderungs- und Anmeldebanner (MOTD) wird 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" [email protected]:/remote/dir /this/dir/

Sowohl der SSH-Client als auch der SSHD-Server verwenden Version 2 des Protokolls.

Was könnte das Problem sein? Vielen Dank.

[BEARBEITEN] Ich habe http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html gefunden, was darauf hinweist, dass es manchmal notwendig ist, "v2 mit dem zu erzwingen -2 Flag zu SSH oder Slogin

 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 vorgenommen habe, aber Tatsache ist, dass sich der Fehler zu etwas anderem entwickelt hat. 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.

62
rfreytag

Eines Ihrer Anmeldeskripte (.bashrc/.cshrc/etc.) Gibt wahrscheinlich Daten an das Terminal aus (wenn dies nicht der Fall sein sollte). Dies führt dazu, dass ssh beim Herstellen einer Verbindung und beim Kopieren bereit ist, wenn 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 Muscheln:

if shopt -q login_Shell; then
    [any code that outputs text here]
fi

oder alternativ so, da der spezielle Parameter - enthält i, wenn die Shell interaktiv ist:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

Weitere Informationen finden Sie unter: rsync über ssh von Linux zu Windows SBS 2003-Protokoll stimmt nicht überein

Stellen Sie zur Diagnose sicher, dass die folgende Ausgabe angezeigt wird, wenn Sie sich beim Host anmelden:

[email protected]'s password: 
Last login: Mon Nov  7 22:54:30 2011 from YOURIP
[[email protected] ~]$ 

Wenn Sie Zeilenumbrüche oder andere Daten erhalten, wissen Sie, dass zusätzliche Ausgaben gesendet werden. Sie können Ihre .bashrc/.cshrc/.profile/etc. Umbenennen. Dateien auf 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 Ihren Systemadministrator, ob die Systemdateien keine Daten ausgeben.

66
Andrew Case

Es gibt eine einfache Möglichkeit, für eine SSH-Verbindung zu testen, ob Ihre Shell sauber ist: Führen Sie einen Befehl über die SSH-Verbindung aus, anstatt eine interaktive Shell zu starten. Der Befehl false wird sofort beendet, ohne dass eine Ausgabe erzeugt wird. Dies ist also ein guter Test:

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash$

Wenn diese Befehlszeile eine Ausgabe erzeugt, ist eines Ihrer Startskripte schuld:

bash$ ssh remotehost false
Enter passphrase for key '/home/user/.ssh/my_private_key': 
Welcome to RemoteHost!

This system is company property and is provided for authorized use only, 
as set forth in applicable written policies. Unauthorized use is prohibited 
and may be subject to discipline, civil suit and criminal prosecution.

Welcome back - You last logged in 16 days ago...
bash$

Eine andere Sache, um zu überprüfen, ob Sie diesen Fehler erhalten, ist, ob rsync von ssh installiert und lokalisierbar ist:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
rsync  version 3.0.9  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.
bash$

Wenn sich rsync nicht im Pfad befindet, wird stattdessen Folgendes angezeigt:

bash$ ssh remotehost "rsync --version"
Enter passphrase for key '/home/user/.ssh/my_private_key': 
bash: rsync: command not found
bash$

Sie können dies beheben, indem Sie entweder rsync installieren oder wenn es installiert ist, aber an einem ungewöhnlichen Ort, den Ort an die rsync-Befehlszeile übergeben:

rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" \
    --rsync-path="/usr/local/bin/rsync" \
    [email protected]:/remote/dir /this/dir/
21
Stobor

Dies wird häufig durch das Login-Material Ihrer Shell verursacht, das Material auf einer nicht interaktiven Shell ausgibt. Sie können testen, ob dies der Fall ist, indem Sie Folgendes tun:

ssh [email protected] "/bin/true" > testfile
ls -l testfile

Wenn die Testdatei NICHT 0 Byte beträgt, besteht das Problem darin, dass Ihre Shell etwas ausgibt. Überprüfen Sie /etc/profile, .profile, .bashrc, .cshrc Usw. Wenn dies der Fall ist, können Sie dies ändern, um zu überprüfen, ob Ihr Terminal interaktiv ist und nur Text ausgibt indem Sie den folgenden Code in einem bashrc verwenden. Etwas Äquivalentes gibt es auch für andere Muscheln:

if shopt -q login_Shell; then
    [any code that outputs text here]
fi

oder alternativ so, da der spezielle Parameter -i enthält, wenn die Shell interaktiv ist:

if echo "$-" | grep i > /dev/null; then
    [any code that outputs text here]
fi

Wenn die Testdatei tatsächlich 0 Bytes enthält, verhält sich Ihre Shell, 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 anzukündigen, dass die alte rysnc-Serverversion sie nicht erkennt. Sie können dies mit der Option --protocol= Tun. In meinem Fall hat die Verwendung von --protocol=30 Den Trick getan.

Wenn Sie immer noch Probleme haben, versuchen Sie es mit ssh, während der Benutzer rsysnc eine Verbindung herstellt, und führen Sie rsync --version Aus, um festzustellen, ob die Shell rsync finden kann. Wenn Sie etwas erhalten, das besagt, dass der Befehl nicht gefunden wurde, ist rsync möglicherweise nicht auf dem Computer installiert, zu dem Sie eine Verbindung herstellen, oder es befindet sich möglicherweise nicht im Pfad. Rsync bietet Optionen zum Festlegen des Pfads des Remote-Endes. Lesen Sie die Manpage (s).

7
Azendale

Ich habe protocol version mismatch -- is your Shell clean? einfach, weil ich rsync noch nicht am other Ende installiert hatte. Sudo yum install rsync Problem gelöst.

4
Kjetil S.

Dies ist ein Sonderfall aus den anderen Antworten, unterscheidet sich aber nicht sehr von diesen.

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 geben diesen Fehler nicht aus.

Dies kann mit demselben Befehl wie oben getestet werden

ssh remotehost false

Dieser sollte scheitern und dieser sollte Erfolg haben

sftp remotehost

Dies beweist, dass Sie nur über SFTP verfügen.

Wenn Sie dies wünschen und die Berechtigung dazu haben, können Sie den Nur-SFTP-Zugriff für diesen Benutzer deaktivieren, indem Sie die Einträge /etc/ssh/sshd_config Bearbeiten und nach match und forcecommand suchen.

Sie können dies auch überprüfen post

4
higuita

Die Eingabeaufforderung wird bei der direkten Ausführung eines Befehls und nicht interaktiv überhaupt nicht angezeigt. Ein einfaches Google zeigt das erste Ergebnis: 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 - Wenn Sie nur "bash" in eine vorhandene Eingabeaufforderung eingeben, sollte nur die neue Eingabeaufforderung angezeigt werden.

2
dgq8

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

1
Dief

Ich beobachte diesen Fehler auch beim Abrufen von Dateien aus einer Instanz mit rsync version 2.5.7 protocol version 26 bis version 3.1.1:

protocol version mismatch - is your Shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(62)
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [Receiver=3.1.1]

Die Remote-Shell hatte jedoch kein Anmeldebanner. Stattdessen bestand die Lösung darin, ein älteres Protokoll anzugeben ( ref ):

rsync --protocol=29 ...
0
patricktokeeffe