Выполнение команды SSH зависает, хотя интерактивная оболочка работает нормально - PullRequest
22 голосов
/ 08 мая 2011

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

Успешная команда: 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 no-more-sessions@openssh.com
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 для синхронизации своих файлов (раньше это работало).Любая помощь высоко ценится.

Ответы [ 6 ]

24 голосов
/ 09 мая 2011

Проблема, действительно, заключалась в моем сценарии входа в систему, хотя он не был связан с требованием терминала (я подозревал это и проверял параметры -t и -T). Проблема заключалась в том, что мой .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 в их сценариях запуска.

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

4 голосов
/ 08 мая 2011

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

2 голосов
/ 20 ноября 2018

Мы исправили это, добавив -n (для перенаправления std из / dev / null) и -t (принудительное распределение псевдо-tty)

Пример:

ssh -t -n user@host command
2 голосов
/ 17 июля 2015

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

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

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

2 голосов
/ 14 ноября 2014

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

2 голосов
/ 08 мая 2011

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

...