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 [user @] ім'я хоста [команда]

Відповіді:


14

У своєму найпростішому вигляді:

ssh -t user@host "command; bash"

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

Якщо ви просто хочете запустити htop на завантаженні серверів, ви можете опустити його bashнаприкінці, але це означає, що якщо ви вийдете з htop, ви повернетесь до локального терміналу.


Я спробував cmd = "bash -c 'ssh -t user @ host htop'; bash". Це працює, але якщо я закриваю htop, я повертаюся до місцевого терміналу, і я не хочу, щоб це сталося
Червоний

1
@Red Перевірте свої котирування - вони в усьому місці - вам потрібно згрупувати htop та баш разом, щоб вони обидва працювали на віддаленому сервері. bash -c 'ssh -t user@host "htop;bash"'було б краще, але я не бачу, чому ти намагаєшся в першу чергу обсмажити цю річ у обгортці. Це не потрібно - ви виконуєте лише одну команду локально.
Олі

Дякую, зараз він працює з cmd = "ssh -t user @ host htop; bash"
Червоний

Хороша відповідь, але треба використовувати щось краще, ніж баш, щоб не припиняти.
mc0e

@ mc0e Залежить від того, що ти хочеш зробити. Це питання стосується отримання корисної оболонки після запуску команди. Якщо ви просто хочете , щоб зробити паузу, ви могли б замінити bashна read.
Олі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.