rsync over ssh "Fehler im Protokolldatenstrom" (Code 12). ssh funktioniert


50

Ich habe es versucht:

rsync -v -v -e 'ssh -p YY' ./testfile me@XXXXX:/home

Fehlermeldung

opening connection using: ssh -p YY -l me 146.6.84.206 rsync ->-server -vvve.s . /home 
[sender] make_file(testfile,*,0)
send_file_list done
send_files starting
server_recv(2) starting pid=17537
rsync: connection unexpectedly closed (9 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(600)[sender=3.0.6]
_exit_cleanup(code=12, file=io.c, line=600): about to call exit(12)

Das funktioniert gut:

ssh -p YY me@XXXXX

Was für mich darauf hindeutet, dass das Problem weder darin sshdbesteht, dass der Port YY nicht ausgeführt wird, noch dass er durch eine Firewall geschützt ist. Ich habe trotzdem nachgesehen.

Welche anderen Probleme könnte es geben?

EDIT: Das Problem scheint "selbstauflösend" gewesen zu sein. Am folgenden Tag konnte ich nicht replizieren. Ich habe meinen lokalen Computer hochgefahren. Vielleicht hatte ich vor allem eine andere IP-Adresse als beim letzten Mal. Und jetzt funktioniert rsync auf magische Weise. Ich würde es begrüßen, wenn ich mir vorstellen könnte, wie es gewesen sein könnte, wenn es vergangen wäre.


1
Haben Sie Schreibrechte auf /homedem Remote-Server?
Souravc

Sicher. Wenn ich ssh mache, kann ich anfangen, Katze und Berührung usw. zu machen. Beim zweiten Gedanken bin ich mir nicht sicher, was du mit Fernbedienung meinst. Ich spreche über das Aufrufen von Rsync auf einem Remote-Server, um Dinge lokal zu verschieben. Ich sollte Schreibrechte sowohl im Original- als auch im
Zielordner haben

Ich habe diesen Fehler ab und zu erhalten (beim Versuch, meinen Pelican-Blog mit meinem Server zu synchronisieren). Ich finde, dass, wenn ich in den Server ssh, dann versuchen Sie den Rsync erneut, es funktioniert gut. Ich bin mir nicht sicher, was dazwischen passiert.
Anthony C

Wenn nicht genügend Speicherplatz auf dem Remoteserver vorhanden ist, kann dies ebenfalls zu diesem Fehler führen.
Makan

Antworten:


84

Sie können diesen Fehler auch erhalten, wenn Sie einen Remote-Pfad angeben, der nicht vorhanden ist.

Ich habe diesen Fehler unter OS X:

$ rsync -avz public/ static:apps/myapp.com
building file list ... done
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-47/rsync/io.c(453) [sender=2.6.9]

In diesem Fall ging es einfach darum, den Zielpfad falsch einzugeben. Das appsdir gab es nicht. Wenn ich das geändert static:sites/myapp.comstatt (die sitesdir tat exist), ging der Fehler weg.

Es ist in Ordnung, wenn das letzte Verzeichnis im Pfad nicht vorhanden ist (was ich tun könnte static:sites/mynewapp.com), aber es scheint, dass ein vorhergehendes Verzeichnis bereits vorhanden sein muss.


Ich habe fast vergessen, diese Frage zu stellen. Ich hatte seitdem nicht mehr das gleiche Problem. Ich vermute, dass dies passiert ist.
user3391229

18
Danke! Das muss die irreführendste Fehlermeldung aller Zeiten sein.
Frans

1
Auch wenn Sie keine ausführbare rsync-Datei haben, wird ein ähnlicher Fehler angezeigt. Meistens habe ich in Ansibles gesehen
Mannoj

Aus irgendeinem Grund dachte ich, rsync würde das Verzeichnis erstellen, wenn es nicht existiert ... Ich denke nicht - Sie müssen zuerst das Zielverzeichnis erstellen. Wenn der Zielpfad mit einem Schrägstrich endet, muss das Verzeichnis vorhanden sein. Wenn es nicht mit einem Schrägstrich endet, muss die eine Ebene darüber vorhanden sein.
Squarecandy

1
Mein Problem ist: Remote-Festplatte ist voll.
Zhang Buzz

15

Ich habe diesen Fehler erhalten, als er rsyncnicht auf dem Zielhost installiert war. Die Fehlermeldung in meinem Fall sagte auch rsync: command not found. Eine einfache

sudo apt-get install rsync

auf dem Zielhost löste sich das Problem.


Ich hatte den Fehlercode 12 und keine Meldung, dass der Befehl rsync nicht gefunden wurde. Nach der Installation ist der Fehler behoben.
Hbar

3

Produziert Ihr Anmeldeskript auf der Remote-Seite Müll auf stdout? Überprüfen Sie dies mit

ssh -p YY me@XXXXX /bin/true > out.txt

Wenn out.txtDaten enthalten sind, identifizieren Sie die beleidigenden Aussagen in Ihrem .profileoder .bashrcund wickeln Sie sie ein

if [ ! -t 1 ]; then
  echo garbage
fi

Nada in out.txt. Aber ich habe es auch heute Nachmittag in einer Zeit versucht, in der ich das Problem nicht reproduzieren konnte.
user3391229

Ich habe dies zu einer Zeit versucht, als ich das Problem produzieren konnte und ich auch nichts in out.txt bekam.
Joshreesjones

1

Möglicherweise müssen Sie den vollständigen Pfad zur SSH-Binärdatei eingeben, d. H

rsync -v -v -e '/usr/bin/ssh -p YY' ./testfile me@XXXXX:/home

Es gibt jedoch auch andere mögliche Ursachen.


Ja, ich habe gelesen, dass dies passieren kann, wenn Sie mehrere Instanzen von ssh haben, auf die Sie möglicherweise verweisen. Die Tatsache, dass es am nächsten Tag
verschwunden ist,

0

Dieser Fehler kann auch auftreten, wenn der Pfad zu rsync auf dem fernen System nicht dem entspricht, den das lokale System annimmt. Sie können sehen, was passiert, indem Sie -vv (oder noch mehr vs) angeben. Wenn dies das Problem ist, können Sie den Remote-Pfad zu rsync mit der Option --rsync-path angeben.


0

Ich habe diesen Fehler gesehen:

rsync -e 'ssh -v'

debug1: Exit status 11

...

rsync error: error in rsync protocol data stream (code 12) at /BuildRoot
/Library/Caches/com.apple.xbs/Sources/rsync/rsync-51/rsync/io.c(453)
[sender=2.6.9]

Ich konnte in den Remote-Host ssh und stellte fest, dass nicht genügend Speicherplatz vorhanden war.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.