Отдельная команда для входа в SSH и запуска программы?

58

Есть ли способ структурировать одну команду для входа через SSH на удаленный сервер и запуска программы в оболочке удаленного входа?

В руководстве OpenSSH написано: «Если указана команда, она выполняется на удаленном хосте вместо оболочки входа в систему». Так, например, ssh user@server mailвойдете на удаленный сервер, отобразите состояние почтового ящика, а затем вернете вас в локальную оболочку. Есть ли способ остаться на удаленной оболочке после отображения статуса почты?

Кроме того, ssh user@server [command]похоже, не работает, если команда является программой, например, vim или mutt. Есть ли способ войти в удаленную оболочку и запустить программу, оставаясь в удаленной оболочке во время выполнения программы и после выхода из программы, только в итоге выходя из определенной logoutкоманды (как в обычном сеансе SSH)?

В конечном итоге я хотел бы иметь возможность поместить такую ​​команду в качестве псевдонима в локальный .bashrc, чтобы она могла быстро запускаться при желании. Примером может быть вход в систему через SSH на удаленный сервер и открытие Mutt на удаленном сервере для чтения или отправки электронной почты.

user981178
источник
Что вы имеете в виду, оставаясь на удаленной оболочке после отображения статуса почты? Не будет ли это эквивалентно делать в SSH после запуска команды почты: ssh remote@server mail ; ssh remote@server? Также любая удаленно выполняемая команда, которой нужен терминал, не выживет / не будет работать над ssh, верно?
MKC
Что ж, похоже, это работает, чтобы запустить команду и затем получить удаленную оболочку, но она делает это, открыв одно SSH-соединение и выполнив команду и закрыв SSH-соединение, а затем открыв другое SSH-соединение. Есть ли способ сделать это все с одним первым подключением? Кроме того, это по-прежнему не позволяет команде запустить программу.
user981178

Ответы:

90

Вы пробовали ssh -t user@server "mail && bash"(или заменили bashна какую угодно оболочку)?

Это -tнеобходимо для того, чтобы создать псевдо-tty для bash для использования в качестве интерактивной оболочки.

jsbillings
источник
1
Хотя, я признаю, я, вероятно, предпочел бы просто запускать muttвнутри tmuxили или screen, и тогда я могу присоединять и присоединять по желанию, плюс я могу запустить столько дополнительных оболочек, сколько захочу.
Jsbillings
1
Ну, я нахожу различное поведение с этой командой. При использовании, как указано выше (в ответе), он по-прежнему отображает только состояние почтового ящика и затем выходит из системы, но теперь также показывает, что соединение закрыто. Используется, как указано выше, но с nano, например, вместо mail, он открывает сеанс nano, а затем при выходе возвращается к удаленной оболочке bash, которая затем должна быть завершена с помощью exitвместо logout. Я пока не могу его проверить с помощью mutt (или подобного).
user981178
Имеет ли -tпроизводить вариант какой - либо проблемы безопасности? Я не использовал это раньше.
user981178
Насколько я знаю -t не представляет никаких проблем безопасности. Вы пробовали замены &&с ;?
BRM
любая команда, которая завершается с ненулевым состоянием выхода, приведет к тому, что вторая команда не будет выполнена из-за логики оболочки.
Jsbillings