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

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

невыполненной команды: ssh -v -v <username>@<server> uptime (также пробовал echo hello etc.)

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
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 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 для синхронизации моих файлов (раньше это работало). Любая помощь очень ценится.

5 ответов


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

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

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


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


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


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


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

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

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