SSHを介してホストに接続し、サービス確認スクリプトを実行します。

SSHを介してホストに接続し、サービス確認スクリプトを実行します。

複数のホストでSSHを介してサービス検証を実行する必要があります。

ホストのリストを教えてください:host1host2host3

以下のようにスクリプトを作成しましたが、SSHでのみ停止しました。

#!/bin/bash

service=splunk

for host in $(</tmp/tstuf.txt);
do
  ssh $host;
  if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
  then
    echo "$service is running"
  else
    echo "$service is not running"
  fi
done

スクリプトを実行すると、sshを実行し、現在のホストからホスト1に移動してそこで停止します。サービスチェックを実行していません。誰でも提案できますか

ベストアンサー1

実行するコマンドを発行していないため、スクリプトは「sshで停止しました」。対話型SSHセッションが確立されssh $hostており、$hostユーザーが対話を開始するのを待っています。

exitリモートホストから来ると、スクリプトは引き続きローカルif (( $(ps ....) > 0 )); then .......... fiシステムで実行されます。次に、リスト内の次のホストに対してforループを続けます(終了するまで再び「停止」)。

#!/bin/bash

service=splunk

for host in $(</tmp/tstuf.txt); do
  ssh $host "if (( \$(ps -ef | grep -v grep | grep $service | wc -l) > 0 )); then
               echo $service is running
             else
               echo $service is not running
             fi"
done

または、@DopeGhotiが提案したように、より簡単でより良い選択肢は次のとおりです。

#!/bin/sh

service=splunk

for host in $(</tmp/tstuf.txt); do
  # echo -n "$host:"  # optional. uncomment the echo if wanted.
  ssh "$host" service "$service" status
done

より良いオプションは、LLNLの並列分散シェルのようなものをインストールすることです。PDSHその後、(ホストリストファイルを設定した後/etc/genders)、次のコマンドを実行できます。

pdsh -g all service splunk status

service splunk status「all」タグで定義されたホストグループで実行されます。

pdsh一度に1つずつ実行するのではなく、複数のホストで同時にコマンドを実行します(したがって、「並列分散シェル」という名前が付けられます)。リモート・システムの各出力行には、対応するホスト名が接頭辞で付けられます。

たとえば、私の小さなホームネットワークでは、次のようになります。

$ pdsh -g all uptime
kali:  12:09:03 up 3 days, 23:26,  2 users,  load average: 0.08, 0.05, 0.06
hanuman:  12:09:03 up 12 days, 13:09,  2 users,  load average: 0.00, 0.00, 0.00
indra:  12:09:03 up 12 days, 13:05,  2 users,  load average: 0.07, 0.12, 0.09
ganesh:  12:09:03 up 34 days, 23:34, 19 users,  load average: 1.86, 1.48, 1.40

ただし、上記の例のようuptimeに、 1行の出力column -tは、たとえば、複数行の出力をpdshホスト名でグループ化するためのコンパニオンユーティリティにパイプすることができますdshbak

常にパスワードを入力したくない場合は、forループまたはSSHを介して接続している他のすべてと同様に、各リモートホストにSSHキーベースの認証を設定する必要があります。

pdshDebian および他のほとんどの Linux ディストリビューション用にパッケージ化されています。

おすすめ記事