rsync через ssh «ошибка в потоке данных протокола» (код 12). SSH работает

51

Я пытался:

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

Сообщение об ошибке

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)

Это прекрасно работает:

ssh -p YY me@XXXXX

Это наводит меня на мысль, что проблема не в том, что sshdон не работает, а в том, что порт YY защищен от огня. Я все равно проверил.

Какие еще проблемы могут быть?

РЕДАКТИРОВАТЬ: проблема, кажется, "сам решается". Я не мог повторить на следующий день. Я запустил свой локальный компьютер. Возможно, у меня был другой IP-адрес, чем в прошлый раз. И теперь rsync волшебным образом работает. Я был бы признателен за предположения о том, что это могло бы быть в свете его ухода.

user3391229
источник
1
У вас есть разрешение на запись на /homeудаленном сервере?
souravc
Конечно. Когда я ssh, я могу начать делать cat и touch и т. Д. На секунду подумал, я не уверен, что вы подразумеваете под дистанционным. Я говорю о вызове rsync на удаленном сервере для локального перемещения. У меня должны быть разрешения на запись как в исходной, так и в целевой папке
user3391229
Я получаю эту ошибку (при попытке rsync моего блога Pelican на мой сервер) время от времени. Я обнаружил, что если я захожу по ssh на сервер, то попробуйте снова rsync, он работает нормально. Не уверен, что происходит между ними.
Энтони C
Недостаточно места на удаленном сервере также может вызвать эту ошибку.
Макан

Ответы:

84

Вы также можете получить эту ошибку, если укажете удаленный путь, который не существует.

Я получил эту ошибку на 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]

Оказалось, что это просто вопрос опечатки пути назначения. Режиссёр appsне существовал. Когда я изменил , что static:sites/myapp.comвместо ( sitesреж сделал СУЩЕСТВУЕТ), ошибка ушла.

Это нормально, если окончательный каталог в пути не существует (я мог бы сделать static:sites/mynewapp.com), но кажется, что любой предыдущий каталог уже должен существовать.

Хенрик Н
источник
Я почти забыл задать этот вопрос. У меня не было той же проблемы с тех пор. Я подозреваю, что это то, что случилось.
user3391229
18
Спасибо! Это должно быть самое вводящее в заблуждение сообщение об ошибке.
Франс
1
также, если у вас нет исполняемого файла rsync, вы увидите похожую ошибку. В основном я видел в ANSIBLE
Манной
По какой-то причине я думал, что rsync создаст каталог, если он не существует ... Думаю, нет - сначала нужно создать каталог назначения. Если путь назначения заканчивается косой чертой, каталог должен существовать. Если он не заканчивается косой чертой, то один уровень над ним должен существовать.
Squarecandy
1
Моя проблема: удаленный диск заполнен.
Чжан Базз
15

Я получил эту ошибку, когда rsyncне был установлен на целевом хосте. Сообщение об ошибке в моем случае также сказал rsync: command not found. Просто

sudo apt-get install rsync

на целевом хосте решили проблему.

Флориан Брукер
источник
У меня была ошибка кода 12 и не было найдено ни одного сообщения о том, что команда rsync не найдена. После установки ошибка исчезла.
Hbar
4

Ваш сценарий входа в систему на удаленном конце производит мусор на стандартный вывод? Проверьте это с

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

Если out.txtсодержит данные, определите оскорбительные заявления в вашем .profileили .bashrcи оберните их в

if [ ! -t 1 ]; then
  echo garbage
fi
Арьен
источник
Нада в out.txt. Но я также попробовал это сегодня днем, когда я не мог воспроизвести проблему.
user3391229
Я пробовал это в то время, когда я мог создать проблему, и я также ничего не получил в out.txt.
Joshreesjones
1

Возможно, вам потребуется указать полный путь к бинарному файлу ssh, т.е.

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

Хотя есть и другие возможные причины.

thomasrutter
источник
Да, я читал, что это может произойти, когда у вас есть несколько экземпляров ssh, на которые вы могли ссылаться. Однако тот факт, что он ушел на следующий день, делает это маловероятным
user3391229
0

Эта ошибка также может произойти, если путь к rsync в удаленной системе не совпадает с тем, что предполагается в локальной системе. Вы можете увидеть, что происходит, указав -vv (или даже больше против). Если это проблема, вы можете указать удаленный путь к rsync с опцией --rsync-path.

Майк
источник
0

Я видел эту ошибку:

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]

Я смог подключиться к удаленному хосту через ssh и обнаружил, что на диске недостаточно места.

Энди
источник