Затем SSH изменит Shell

Потенциально простой вопрос, но мне было интересно, если кто-нибудь может любезно предоставить некоторые советы.

Чтобы выполнить повторяющуюся задачу, я постоянно регистрируюсь на удаленном сервере Solaris, используя учетные данные, предоставленные нам нашим системным администратором. Однако каждый раз, когда я вхожу в систему, я должен изменить оболочку (из csh → bash), так как конкретная задача должна выполняться с помощью BASH.

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

Есть ли способ, в котором я могу ssh и изменить оболочку по умолчанию в одной строке, чтобы сразу начать с script на удаленном сервере? Обратите внимание, что я не могу изменить какие-либо файлы журнала (например .login или .cshrc) в качестве удаленного сервера, а учетные данные являются общими для меня не специально. Я не хочу менять оболочку по умолчанию на сервере, так как, опять же, сервер и учетные данные используются несколькими людьми.

У кого-нибудь есть идеи, как обойти такую ​​проблему? Любые предложения были бы с благодарностью.

Ответ 1

SSH обычно выполняет команду, которую вы передаете в качестве аргумента, а затем отключается. Для работы вашего интерактивного сеанса вам понадобятся три варианта:

  • ssh -t будет принудительно распределять псевдо-tty, необходимые для взаимодействия с удаленной командой, с которой вы хотите запустить SSH.
  • bash -l запустится интерактивная оболочка для входа
  • csh -l -c запустит интерактивную оболочку входа в csh, а затем выполнит следующую команду

Чтобы просто запустить другую оболочку (т.е. ваш по умолчанию - csh, и вы хотите запустить bash):

ssh -t <user>@<server> "bash -l"

Чтобы сначала перенести среду csh, мы запускаем интерактивную оболочку, а затем передаем команду для переключения на bash:

ssh -t <user>@<server> 'csh -l -c "bash"'