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

12

Я хочу написать скрипт, который откроет терминал с разными вкладками, войдет на сервер с помощью 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 [пользователь @] имя хоста [команда]

красный
источник

Ответы:

14

В простейшем виде:

ssh -t user@host "command; bash"

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

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

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