サーバーへのSSH、コマンドの実行、および接続の維持


12

さまざまなタブで端末を開き、ssh各タブでサーバーにログオンし、各タブでコマンドを実行するスクリプトを作成したいと思います。例:htop

以下のスクリプトは、すべてサーバーにログインしている4つのタブを持つターミナルを開きます。しかしhtopcmd=行にコマンドを追加しようとすると、機能しなくなります...

#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 @] hostname [コマンド]

回答:


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をグループ化して、両方がリモートサーバーで実行されるようにする必要があります。bash -c 'ssh -t user@host "htop;bash"'良いでしょうが、そもそもなぜこれをbashラッパーで揚げようとしているのかわかりません。必須ではありません-ローカルで実行するコマンドは1つだけです。
オリ

ありがとう、今はcmd = "ssh -t user @ host htop; bash"

良い答えですが、終了しないためには、bashよりも良いものが必要です。
mc0e

@ mc0e何をしたいかに依存します。この質問は、コマンドを実行した後に便利なシェルを取得することに関するものです。一時停止する場合は、の代わりにbash使用できますread
オリ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.