Вопрос SSH для сервера, выполнить команду и поддерживать соединение


Я хочу написать сценарий, который открывает терминал с различными вкладками, вход на сервер, используя ssh в каждой вкладке и выполнить команду на каждой вкладке. Например: htop,

В приведенном ниже сценарии открывается терминал с 4 вкладками, все из которых зарегистрированы на сервере. Но если я попытаюсь добавить htop команды в cmd= лайн он больше не работает ...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

Я пробовал это ...

cmd="bash -c 'ssh user@host htop';bash"

...поскольку ssh --help говорит, что синтаксис для ssh является:

использование: ssh [user @] имя хоста [команда]


12
2017-07-10 09:53


происхождения




ответы:


В простейшей форме:

ssh -t user@host "command; bash"

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

Если вы просто хотите запустить htop при загрузке серверов, вы можете опустить bash в конце, но это означает, что если вы выйдете из htop, вы вернетесь к локальному терминалу.


13
2017-07-10 10:06



Я пробовал cmd = "bash -c 'ssh -t user @ host htop'; bash". Он работает, но если я уйду из htop, я вернусь на локальный терминал, и я не хочу, чтобы это произошло - Red
@Red Проверьте свои кавычки - они повсюду - вам нужно объединить htop и bash, чтобы они оба запускались на удаленном сервере. bash -c 'ssh -t user@host "htop;bash"' было бы лучше, но я не понимаю, почему вы пытаетесь обжарить эту штуку в обертке bash в первую очередь. Это не требуется - вы используете только одну команду локально. - Oli♦
Спасибо, теперь он работает с cmd = "ssh -t user @ host htop; bash" - Red
Хороший ответ, но должно быть что-то лучше использовать, чем bash, чтобы не прекращаться. - mc0e
@ mc0e Зависит от того, что вы хотите сделать. Этот вопрос связан скорее с получением полезной оболочки после запуска вашей команды. Если вы просто хотите сделать паузу, вы можете заменить bash для read, - Oli♦