Frage Protokollversion stimmt nicht überein - ist Ihre Shell sauber?


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

Ich bekomme den Fehler "Protokollversion stimmt nicht überein - ist Ihre Shell sauber?"

Ich habe irgendwo gelesen, dass ich die Aufforderung (PS1 = "") und motd (.hushlogin) ausschalten musste, um damit fertig zu werden. Ich habe dies getan, die Aufforderung und Login-Banner (MOTD) nicht mehr angezeigt, aber der Fehler erscheint immer noch, wenn ich:

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.

Was könnte das Problem sein? Vielen Dank.

[BEARBEITEN] ich habe gefunden http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html was dazu führt, dass es manchmal notwendig ist, "v2 mit dem -2-Flag zu ssh oder slogin zu zwingen

 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 dem Fehler geändert habe, aber die Tatsache ist, dass der Fehler sich zu etwas anderem entwickelt hat. Ich werde dies aktualisieren, wenn ich mehr lerne. Und ich werde sicherlich den Vorschlag versuchen, dies in einer Emacs-Shell zu tun - danke.


49
2018-05-06 21:15


Ursprung


Geben Ihre Anmeldescripts etwas aus, das nicht sofort sichtbar ist, z. B. einen Befehl zum Ändern des Fenstertitels? Eine Möglichkeit, dies zu überprüfen, ist die Ausführung von Emacs ESC x shell, und TU export TERM=xterm; ssh remotehost ls. Wenn irgendwelche Steuerzeichen oder andere unechte Ausgaben erscheinen, müssen Sie auf die Jagd gehen. - Gilles
Ich hatte das gleiche Problem. In meinem Fall wurde der SSH-Server so konfiguriert, dass er Benutzer chrootte und nur SFTP-Zugriff erlaubte, so dass es nicht möglich war, den rsync-Befehl von der Remote-Shell aus auszuführen. Wenn Sie Zugriff auf den Server haben, überprüfen Sie die Konfigurationsoption ForceCommand in / etc / ssh / sshd_config. Wenn es auf etwas eingestellt ist, ist das das Problem. - devius
Für den Rekord, ich bin in eine Situation geraten, in der ich gerade mit einem Protokollkonflikt aufgab. rsync --version Ausgabe identisch auf beiden Hosts, interaktive und nicht-interaktive ssh völlig still, nichts Schickes in authorized_keys ... Es funktioniert einfach nicht. Ich überlasse diesen Kommentar für andere, die Rabbint Holing sind. Tun Sie sich einen Gefallen und versuchen Sie es ohne --rsync-Pfad. Sie werden wahrscheinlich feststellen, dass Ihr Problem nichts mit dieser SO zu tun hat. - sheldonh
@sheldonh: Hat sich der Pfad auf lokaler und remoter Maschine in Ihrem Fall unterschieden? in meinem Fall sind sie sowieso gleich und geben oder geben es nicht (--rsync-path) ändert nichts für mich. - 0xC0000022L
@ 0xC0000022L Sorry, ich kann mich nicht erinnern. - sheldonh


Antworten:


Eines Ihrer Anmeldeskripts (.bashrc / .cshrc / etc.) Gibt wahrscheinlich Daten an das Terminal aus (wenn dies nicht der Fall sein sollte). Dies verursacht einen ssh-Fehler, wenn es eine Verbindung herstellt und zum Kopieren bereit ist, wenn es beginnt, zusätzliche Daten zu empfangen, die es nicht erwartet. Entfernen Sie die Ausgabe, die in den Startskripten generiert wird.

Sie können prüfen, ob Ihr Terminal interaktiv ist und nur Text ausgeben, indem Sie den folgenden Code in einer bashrc verwenden. Etwas Äquivalentes existiert auch für andere Shells:

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

oder alternativ, wie dies seit dem speziellen Parameter - enthält i wenn die Shell interaktiv ist:

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

Für weitere Informationen siehe: rsync über ssh von Linux zu Windows sbs 2003 Protokoll nicht übereinstimmen

Um dies zu diagnostizieren, stellen Sie sicher, dass die folgende Ausgabe die Ausgabe ist, die Sie erhalten, wenn Sie sich beim Host anmelden:

USER@HOSTNAME's password: 
Last login: Mon Nov  7 22:54:30 2011 from YOURIP
[USER@HOSTNAME ~]$ 

Wenn Sie Zeilenumbrüche oder andere Daten erhalten, wissen Sie, dass zusätzliche Ausgaben gesendet werden. Sie könnten Ihre .bashrc / .cshrc / .profile / etc umbenennen. Dateien zu etwas anderem, so dass sie keine zusätzliche Ausgabe ausgeben. Natürlich gibt es noch Systemdateien, die dies verursachen könnten. Überprüfen Sie in diesem Fall mit Ihrem Systemadministrator, dass die Systemdateien keine Daten ausgeben.


54
2017-11-07 08:31



Ein echo in dem ~/.bashrc, Vielen Dank. Du hast meinen Tag gerettet - xyz


Es gibt eine einfache Möglichkeit zu testen, ob Ihre Shell für eine SSH-Verbindung sauber ist: Führen Sie einen Befehl von der SSH-Verbindung aus, anstatt eine interaktive Shell zu starten. Das false Befehl wird sofort beendet, ohne irgendeine Ausgabe zu produzieren, also ist es 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 zu überprüfen, ob Sie diesen Fehler erhalten, ist, ob rsync installiert und durch ssh 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, sehen Sie stattdessen Folgendes:

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 an einem ungewöhnlichen Ort installiert ist, den Speicherort an die rsync-Befehlszeile übergeben:

rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" \
    --rsync-path="/usr/local/bin/rsync" \
    remoteuser@remotehost:/remote/dir /this/dir/

15
2018-01-19 11:39





Dies wird häufig dadurch verursacht, dass die Anmeldeinformationen Ihrer Shell Inhalte in einer nicht interaktiven Shell ausgeben. Sie können testen, ob dies der Fall ist:

ssh username@host "/bin/true" > testfile
ls -l testfile

Wenn testfile NICHT 0 Bytes ist, besteht das Problem darin, dass Ihre Shell etwas ausgibt. Prüfen /etc/profile, .profile, .bashrc, .cshrcusw. Wenn dies der Fall ist, können Sie es ändern, um zu prüfen, ob Ihr Terminal interaktiv ist und nur Text ausgibt, indem Sie den folgenden Code in einer bashrc verwenden. Etwas Äquivalentes existiert auch für andere Shells:

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

oder alternativ, wie dies seit dem speziellen Parameter - enthält i 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 Byte ist, verhält sich Ihre Shell jedoch, aber es ist möglich, dass Sie nur eine sehr alte Version von rsync haben. Sie können dem Client-Ende sagen (vorausgesetzt, es ist das neuere Ende), keine so hohe Version anzukündigen, dass die alte rysnc-Serverversion es nicht erkennt. Sie können dies mit dem. Tun --protocol= Möglichkeit. In meinem Fall, mit --protocol=30 Hat den Trick gemacht.

Wenn Sie immer noch Probleme haben, versuchen Sie ssh in, wenn sich der Benutzer mit rsysnc verbindet und versucht, ihn auszuführen rsync --version um zu sehen, ob die Shell rsync finden kann. Wenn Sie einen Befehl erhalten, der besagt, dass der Befehl nicht gefunden wurde, wird rsync möglicherweise nicht auf dem Computer installiert, mit dem Sie eine Verbindung herstellen, oder er befindet sich möglicherweise nicht im Pfad. Rsync hat Optionen zum Angeben des Pfades des entfernten Endes, lesen Sie die man-Seite (n).


6
2017-07-16 20:28



+1 für den Hinweis über --protocol was mein Problem mit einem 2.5.6 Server (Protokoll Version 26) und einem 3.1.0 Client (Protokoll Version 31) gelöst hat - MattBianco


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

Um ein rsync über ssh auszuführen, benötigen Sie einen Shell-Zugriff in ssh, um den remote rsync-Befehl auszuführen. Wenn Ihr ssh-Konto nur scp / sftp zulässt, können Sie das Entfernen rsync nicht starten und diesen Fehler nicht geben.

Dies kann mit dem gleichen Befehl wie oben getestet werden

ssh remotehost false

Dieser sollte scheitern und dieser sollte Erfolg haben

sftp remotehost

Dies beweist, dass du nur einen sftp-Zugang hast.

Wenn Sie dazu berechtigt und berechtigt sind, können Sie den sftp only-Zugriff für diesen Benutzer deaktivieren, indem Sie die /etc/ssh/sshd_config und nachsehen match  und forcecommand Einträge.

Sie können dies auch überprüfen Post


4
2018-06-11 16:11





ich habe protocol version mismatch -- is your shell clean? einfach weil ich rsync nicht installiert habe andere Ende noch. sudo yum install rsync Problem gelöst.


4
2017-09-16 10:33



Verbrachte 30 Minuten mit einem Container und Ansible fragte sich, warum rsync nicht funktionierte ... schwer, damit es funktioniert, wenn es nicht installiert ist! Vielen Dank ;) - Ryan Fisher


Die Eingabeaufforderung wird nicht angezeigt, wenn ein Befehl direkt und nicht interaktiv ausgeführt wird. Ein einfaches Google zeigt erstes Ergebnis: http://marc.info/?l=rsync&m=100263876212594&w=2 Und da die Shell möglicherweise aufgerufen werden kann, darf sie nichts im nicht interaktiven Modus anzeigen. Wenn beispielsweise nur "bash" in eine vorhandene Eingabeaufforderung eingegeben wird, sollte nichts als die neue Eingabeaufforderung angezeigt werden.


2
2018-05-06 21:29



Vielleicht habe ich es nicht klar genug gemacht, aber ich habe das schon gemacht "(PS1 =" ") und motd (.hushlogin)". Die Anmeldung zeigt tatsächlich keine Eingabeaufforderung. Trotzdem erscheint der Protokoll-Mismatch-Fehler immer noch. Vielen Dank - viel zu schätzen den Vorschlag. - rfreytag
Sie haben das bereits erwähnt, aber ich hatte solche Probleme, wenn etwas in der .bashrc (oder einem anderen Profilskript) etwas auf den Bildschirm zurückgibt. Ich hatte sogar diese Art von Problem beim Ausführen bestimmter Programme in der Shell, die Dinge in einer bestimmten Weise ändert (zum Beispiel konnte ich meine Shell mit chsh nicht ändern, also hatte ich meine .cshrc run bash, um meine zu ändern Shell und ssh würde nicht mehr funktionieren). - lsd
Nun, das ist sicherlich interessant. Ich frage mich, wie ich dies diagnostizieren könnte, da die Ausführung des Rsync-Befehls interaktiv zeigt, dass nichts auf dem Bildschirm wiedergegeben wird und der Login vollkommen stumm ist? Hmmm ... Ich frage mich, ob etwas mit der Schale nicht stimmt, wie du es vorschlägst. Vielen Dank. - rfreytag


Dies kann durch eine Login-Nachricht auf dem Remote-Host verursacht werden, z. B. "Ihr Passwort wird in 6 Tagen ablaufen", was RSYNC nicht erwartet


1
2018-04-30 23:28