Подтвердить что ты не робот

Выполнение команд SSH зависает, хотя интерактивные функции оболочки отлично

Когда я пытаюсь выполнить команду на удаленном сервере с помощью ssh, команда ssh зависает после отладочного сообщения exec request accepted и в конечном итоге отключается.

Неудачная команда: ssh -v -v <username>@<server> uptime (также попробовал echo hello и т.д.)

debug1: Authentication succeeded (publickey).
Authenticated to <server> (<ip>:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 4 setting TCP_NODELAY
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug1: Sending command: uptime
debug2: channel 0: request exec confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: exec request accepted on channel 0

И там он висит бесконечно.

Однако, когда я ssh без команды на моем удаленном сервере, я получаю интерактивную оболочку, и все это хорошо.

Успешная команда: ssh -v -v <username>@<server>

Вывод:

debug1: Authentication succeeded (publickey).
Authenticated to <server> (<ip>:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug2: fd 4 setting TCP_NODELAY
debug2: channel 0: request pty-req confirm 1
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
debug2: channel 0: request env confirm 0
debug2: channel 0: request shell confirm 1
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel_input_status_confirm: type 99 id 0
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Welcome!
<prompt>%
...

Есть ли у кого-нибудь идея, почему интерактивный сеанс будет успешным, но выполнение команды не?

Меня преследовали уже несколько месяцев, потому что я больше не могу использовать unison для синхронизации моих файлов (он работал). Любая помощь очень ценится.

4b9b3361

Ответ 1

Проблема заключалась в том, что мой логин script, хотя и не требовал терминала (я подозревал это и тестировался с параметрами -t и -t). Проблема заключалась в том, что my .bashrc выполнял exec (в данном случае - zsh), потому что наша система не разрешает chsh до zsh).

Линия нарушения:

test -f /usr/bin/zsh && exec /usr/bin/zsh

Решено сначала проверить интерактивную оболочку и выйти, если это так:

[ -z "$PS1" ] && return
test -f /usr/bin/zsh && exec /usr/bin/zsh

Итак, по сути, потому что оболочка выполнялась в zsh, ssh ждала, когда это закончится, чего не было.

Я немного смущен, почему мой .bashrc был вызван вообще - я думал, что это только для интерактивных оболочек, но точная цель и порядок различных скриптов инициализации - это то, что я не думаю, что когда-либо буду узнать.

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

BTW - два других ответа были на правильном пути, поэтому я совершенно не знал, должен ли я отвечать или просто комментировать их ответы. Если ответ на мой собственный вопрос является морально неправильным в stackoverflow, дайте мне знать, и я сделаю покаяние. Спасибо другим ответчикам.

Ответ 2

Ваша проблема, скорее всего, заключается в сценариях запуска оболочки или оболочки. Не зная, что там, трудно угадать фактическую проблему.

Ответ 3

Проверьте команды в файлах запуска оболочки (я бы предположил, что ~/.cshrc из вашего приглашения; в неинтерактивном сеансе ~/.login не имеет значения), для которого по какой-то причине требуется терминал.

Ответ 4

Недавно я столкнулся с проблемой с теми же симптомами, но решил, что проблема не была проблемой в моих сценариях входа. Скорее, мой локальный .ssh/config файл был настроен с RequestTTY force для хоста, к которому я пытался копировать.

Ответ 5

У меня была эта проблема на сервере fedora 22 после разрешения других новых проблем.

ssh -t ziimp/bin/true было нормально, но не ssh ziimp/bin/true, и все мои git + ssh и scp были заблокированы.

Решение, которое я нашел, находится в файле authorized_keys. Мне пришлось удалить префикс command = "/usr/bin/ bash" из моих доверенных ключей...