rsync over ssh „błąd w strumieniu danych protokołu” (kod 12). ssh działa

50

Próbowałem:

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

Komunikat o błędzie

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)

Działa to dobrze:

ssh -p YY me@XXXXX

Co sugeruje mi, że problemem jest to, że sshdnie jest uruchomiony, ani że port YY jest zaporowy. Zresztą sprawdziłem.

Jakie mogą być inne problemy?

EDYCJA: Wydaje się, że problem polegał na „samodzielnym rozwiązaniu”. Nie mogłem powielić następnego dnia. Uruchomiłem komputer lokalny. Być może w szczególności miałem inny adres IP niż poprzednio. A teraz rsync działa magicznie. Byłbym wdzięczny za domysły na temat tego, co mogło być w świetle tego, że odchodzi.

użytkownik3391229
źródło
1
Czy masz uprawnienia do zapisu na /homezdalnym serwerze?
souravc
Pewnie. Kiedy ssh, mogę zacząć robić kota i dotykać itp. Po namyśle nie jestem pewien, co masz na myśli mówiąc zdalnie. Mówię o wywołaniu rsync na zdalnym serwerze, aby przenieść rzeczy lokalnie. Powinienem mieć uprawnienia do zapisu zarówno w folderze oryginalnym, jak i docelowym
3391229
Ten błąd pojawia się (podczas próby synchronizacji mojego bloga Pelican z moim serwerem) co jakiś czas. Uważam, że jeśli ssh do serwera, a następnie spróbuj ponownie rsync, działa dobrze. Nie jestem pewien, co dzieje się pomiędzy.
Anthony C
Brak wystarczającej ilości miejsca na zdalnym serwerze może również podnieść ten błąd.
Makan

Odpowiedzi:

84

Ten błąd można również uzyskać, jeśli określisz zdalną ścieżkę, która nie istnieje.

Mam ten błąd w systemie 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]

Okazało się, że po prostu źle wpisałem ścieżkę docelową. appsReż nie istnieje. Kiedy zmienił się że static:sites/myapp.comzamiast (the sitesdir nie istnieje), błąd odszedł.

W porządku, jeśli końcowy katalog na ścieżce nie istnieje (mógłbym to zrobić static:sites/mynewapp.com), ale wygląda na to, że poprzedni katalog musi już istnieć.

Henrik N.
źródło
Prawie zapomniałem zadać to pytanie. Od tamtej pory nie miałem tego samego problemu. Podejrzewam, że tak się stało.
user3391229
18
Dziękuję Ci! To musi być najbardziej mylący komunikat o błędzie w historii.
Frans
1
również jeśli nie masz pliku wykonywalnego rsync, pokazuje podobny błąd. Głównie widziałem w ansibles
mannoj
Z jakiegoś powodu myślałem, że rsync utworzyłby katalog, gdyby nie istniał ... Chyba nie - najpierw musisz utworzyć katalog docelowy. Jeśli ścieżka docelowa kończy się ukośnikiem, katalog musi istnieć. Jeśli nie kończy się ukośnikiem, musi istnieć jeden poziom powyżej.
squarecandy
1
Mój problem to: dysk zdalny jest pełny.
Zhang Buzz
15

Wystąpił ten błąd, gdy rsyncnie został zainstalowany na hoście docelowym. Komunikat o błędzie w moim przypadku również powiedział rsync: command not found. Prosty

sudo apt-get install rsync

na hoście docelowym rozwiązał problem.

Florian Brucker
źródło
Wystąpił błąd kodu 12 i nie znaleziono komunikatu o braku komendy rsync. Po zainstalowaniu błąd zniknął.
Hbar
3

Czy twój skrypt logowania na odległym końcu produkuje śmieci na standardowym wyjściu? Sprawdź to za pomocą

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

Jeśli out.txtzawiera dane, zidentyfikuj obrażające wypowiedzi w swoim .profilelub .bashrci zawiń je

if [ ! -t 1 ]; then
  echo garbage
fi
Arjen
źródło
Nada w out.txt. Ale próbowałem też tego popołudnia w okresie, w którym nie mogłem odtworzyć problemu.
user3391229
Próbowałem tego w czasie, gdy mogłem rozwiązać problem, ale nie dostałem nic w pliku out.txt.
joshreesjones
1

Może być konieczne podanie pełnej ścieżki do pliku binarnego ssh, tj

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

Chociaż istnieją inne możliwe przyczyny.

thomasrutter
źródło
Tak, czytałem, że może się to zdarzyć, gdy masz wiele wystąpień ssh, do których możesz się odwoływać. Jednak fakt, że odszedł następnego dnia, czyni to mało prawdopodobnym
użytkownik3391229
0

Ten błąd może się również zdarzyć, jeśli ścieżka do rsync w systemie zdalnym nie jest taka, jak zakłada system lokalny. Możesz zobaczyć, co się dzieje, podając opcję -vv (lub nawet więcej vs). Jeśli to jest problem, możesz określić ścieżkę zdalną do rsync za pomocą opcji --rsync-path.

Mikrofon
źródło
0

Widziałem ten błąd:

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]

Byłem w stanie ssh na zdalnym hoście i stwierdziłem, że brakuje miejsca na dysku.

Andy
źródło