Назад | Перейти на главную страницу

SSH зависает при "запросе exec принят на канале 0"

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

Сценарий

Моя оболочка по умолчанию в моей компании - csh, а не что-то более разумное, например bash. Я знаю, что bash поддерживается, поскольку некоторые другие товарищи по команде используют его в качестве оболочки по умолчанию. Для всех наших процессов csh работает нормально, но я просто хотел бы использовать что-нибудь получше. Я изменил свой .cshrc, чтобы запустить bash.

setenv SHELL /bin/bash
exec /bin/bash --login

Это прекрасно создает оболочку, устанавливает переменную среды SHELL и запускает bash при запуске. Проблема возникает со всеми командами ssh (и rsh), которые запускаются либо через скрипты, либо вручную. Я могу бегать ssh user@host и получить оболочку в порядке, но я пытаюсь бежать ssh -vvv user@host "echo hello"

Он зависает в конце после аутентификации и отправки команды с

debug1: Sending command: echo hello
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

Что я пробовал

Эти изменения проверяются простым подключением к локальному хосту для простоты.

.bashrc и .bash_profile изменения

Я пробовал много разных конфигураций .bashrc и .bash_profile, убедившись, что они не связаны с переменными окружения. На самом деле это не похоже на проблему, поскольку в bash они все такие же, как и в csh (что отлично работает).

Добавление -t

Я добавил -t флаг для ssh для подключения, но на самом деле это не запускает команду, которую я говорю ему запускать, но дает мне оболочку для использования. Это также не обязательно решение само по себе, поскольку кучу сценариев нельзя изменить, поскольку они доступны всем.

[user@host: ~/test ] $ ssh -t user@host "echo hello"
[user@host ~]$

Проверка работоспособности в csh

С участием -t:

[user@host: ~/test ] $ ssh -t user@host "echo hello"
hello
Connection to host closed.
[user@host: ~/test ] $

Без -t:

[user@host: ~/test ] $ ssh -t user@host "echo hello"
hello
[user@host: ~/test ] $

Дополнительная информация

ИТ-служба моей компании посмотрела и просто сказала, что это проблема с моим профилем bash, и посмотрела на мои .bashrc и .bash_profile, по сути говоря, чтобы я разобрался сам. Я не говорю, что они ошибаются, но я говорю, что проделал всю отладку, которую только мог придумать, и поэтому я иду сюда. Это также в значительной степени означает, что я не могу ничего изменить на стороне сервера и должен полагаться на сторону клиента / пользователя.

Bash определенно загружен и не запускает csh с моими изменениями .cshrc, судя по ps:

   PID TTY          TIME CMD
  6725 pts/68   00:00:00 bash
 26391 pts/68   00:00:00 ps

Вывод

Что, черт возьми, происходит? Я очень сбит с толку, так как не очень хорошо знаю внутреннюю работу ssh, и я еще менее уверен, почему csh ведет себя так, а бьет по другому. Мой стартап на bash выглядит круто?

Отвечая на свой вопрос, но ... Я пробовал что-то новое, что, кажется, работает?

В итоге я переместил команды запуска bash ( setenv и exec) с .cshrc на .login. Я понятия не имею, почему это изменит ситуацию, поскольку, насколько мне известно, csh загружает обе эти вещи одинаково и одну сразу за другой. Но теперь ssh работает, и все мои скрипты, которые мне нужны, запускаются. Итак ... если у кого-то еще возникала подобная проблема, попробуйте этот простой шаг.