У меня есть вопрос, который очень похож на другие, которые задавали, но ни один из них не ответил на мою проблему. У меня возникает ошибка 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, убедившись, что они не связаны с переменными окружения. На самом деле это не похоже на проблему, поскольку в bash они все такие же, как и в csh (что отлично работает).
Я добавил -t
флаг для ssh для подключения, но на самом деле это не запускает команду, которую я говорю ему запускать, но дает мне оболочку для использования. Это также не обязательно решение само по себе, поскольку кучу сценариев нельзя изменить, поскольку они доступны всем.
[user@host: ~/test ] $ ssh -t user@host "echo hello"
[user@host ~]$
С участием -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 работает, и все мои скрипты, которые мне нужны, запускаются. Итак ... если у кого-то еще возникала подобная проблема, попробуйте этот простой шаг.