При выполнении инструкций по резервному копированию rsync, приведенных здесь: http://troy.jdmz.net/rsync/index.html
Я получаю сообщение об ошибке "Несоответствие версии протокола - чиста ли ваша оболочка?"
Я где-то читал, что мне нужно отключить отображение подсказок (PS1 = "") и motd (.hushlogin), чтобы справиться с этим. Я сделал это, приглашение и баннер входа в систему (MOTD) больше не появляются, но ошибка все еще появляется, когда я бегу:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
Как ssh-клиент, так и sshd-сервер используют версию 2 протокола.
В чем может быть проблема? Благодарю.
[РЕДАКТИРОВАТЬ] Я нашел http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html, который указывает, что иногда необходимо выполнить «Force v2» с помощью флага -2 для ssh или slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
Не ясно, что это решило проблему, так как я думаю, что я поместил это изменение в ПОСЛЕ изменения ошибки, но факт в том, что ошибка превратилась в нечто другое. Я обновлю это, когда узнаю больше. И я обязательно попробую предложить запустить это в оболочке emacs - спасибо.
ESC x shell
и сделатьexport TERM=xterm; ssh remotehost ls
. Если появляются какие-либо управляющие символы или другие ложные данные, это то, что вы должны выследить.--rsync-path
) ничего не меняет для меня.Ответы:
Один из ваших сценариев входа в систему (.bashrc / .cshrc / etc.), Вероятно, выводит данные в терминал (когда это не должно быть). Это приводит к ошибке ssh при подключении и подготовке к копированию, поскольку он начинает получать дополнительные данные, которых он не ожидает. Удалить вывод, который генерируется в сценариях запуска.
Вы можете проверить, является ли ваш терминал интерактивным и выводить только текст, используя следующий код в bashrc. Что-то эквивалентное существует и для других оболочек:
или альтернативно, как это, так как специальный параметр
-
содержит,i
когда оболочка является интерактивной:Для получения дополнительной информации см. Rsync через ssh из linux в windows sbs 2003 несоответствие протокола
Чтобы диагностировать это, убедитесь, что ниже приведены выходные данные, которые вы получаете, когда входите в ssh на хосте:
Если вы получаете новые строки или другие данные, вы знаете, что отправляется дополнительный вывод. Вы можете переименовать ваш .bashrc / .cshrc / .profile / и т.д. файлы к чему-то еще, чтобы они не выводили дополнительный вывод. Конечно, есть еще системные файлы, которые могут вызвать это. В этом случае проверьте у своего системного администратора, что системные файлы не выводят данные.
источник
echo
В~/.bashrc
, Thx. Вы сделали мой деньСуществует простой способ проверить, является ли ваша оболочка чистой для соединения ssh: выполнить команду из соединения ssh вместо запуска интерактивной оболочки. Команда
false
немедленно прекратит работу без вывода каких-либо результатов, поэтому это хороший тест:Если эта командная строка производит какой-либо вывод, виноват один из ваших сценариев запуска:
Еще одна вещь, чтобы проверить, если вы получаете эту ошибку, это то, установлен ли rsync и доступен ли с помощью ssh:
Если rsync не в пути, вы увидите что-то вроде:
Это можно исправить, установив rsync, или, если он установлен, но в необычном месте, передав его в командную строку rsync:
источник
Обычно это происходит из-за того, что входящие данные вашей оболочки выводятся на неинтерактивную оболочку. Вы можете проверить, так ли это, выполнив:
Если testfile НЕ равен 0 байтов, проблема в том, что ваша оболочка что-то выводит. Проверьте
/etc/profile
,.profile
,.bashrc
,.cshrc
и т.д. Если это так, вы можете изменить его , чтобы проверить , если ваш терминал в интерактивном режиме и только вывод текста, используя следующий код в Bashrc. Что-то эквивалентное существует и для других оболочек:или альтернативно, как это, так как специальный параметр
-
содержит,i
когда оболочка является интерактивной:Однако, если тестовый файл фактически равен 0 байтов, значит, ваша оболочка работает, но возможно, что у вас просто очень старая версия rsync. Вы можете сказать клиентской стороне (предполагая, что это более новая сторона) не рекламировать такую высокую версию, чтобы старая версия сервера rysnc не распознала ее. Вы можете сделать это, используя
--protocol=
опцию. В моем случае с использованием--protocol=30
сделал трюк.Если у вас все еще возникают проблемы, попробуйте ssh, поскольку пользователь rsysnc подключается к нему, и попробуйте запустить,
rsync --version
чтобы увидеть, может ли оболочка найти rsync. Если вы получите что-то, в котором говорится, что команда не найдена, то rsync может быть не установлен на машине, к которой вы подключаетесь, или он может быть не в пути. Rsync имеет опции для указания пути к удаленному концу, прочитайте справочную страницу.источник
--protocol
что решило мою проблему с сервером 2.5.6 (версия протокола 26) и клиентом 3.1.0 (версия протокола 31)Это особый случай из других ответов, но не сильно отличается от того.
Чтобы выполнить rsync через ssh, вам нужен доступ к оболочке в ssh для выполнения команды удаленного rsync. Если ваша учетная запись ssh разрешает только scp / sftp, вы не сможете запустить команду удаления rsync и не выдаст эту ошибку.
Это можно проверить с помощью той же команды, что и выше
Этот должен потерпеть неудачу, и этот должен быть успехом
Это доказывает, что у вас есть доступ только по sftp.
Если вы хотите и имеете разрешения для этого, вы можете отключить доступ только для sftp для этого пользователя, отредактировав записи
/etc/ssh/sshd_config
и проверкиmatch
иforcecommand
записи.Вы также можете проверить этот пост
источник
Я получил это
protocol version mismatch -- is your shell clean?
просто потому, что еще не установил rsync на другом конце.sudo yum install rsync
решил проблему.источник
Подсказка вообще не будет отображаться при непосредственном выполнении команды, и не в интерактивном режиме. Простой Google запускает первый результат: http://marc.info/?l=rsync&m=100263876212594&w=2 И поскольку оболочка потенциально может быть вызвана, она не должна отображать что-либо в неинтерактивном режиме - например, при вводе просто " bash "в существующее приглашение, только новое приглашение должно появиться.
источник
Это может быть вызвано сообщением о входе в систему на удаленном хосте, например, «Срок действия вашего пароля истечет через 6 дней», которого RSYNC не ожидает
источник