SSH経由で複数のサーバーで同じスクリプトを実行する

SSH経由で複数のサーバーで同じスクリプトを実行する

一部のUbuntu 12.04(Precise Pangolin)サーバーを頻繁に更新する必要があります(ラックスペース)。

私が今やっていることは:

  • SCPを使用してサーバーにファイルをコピーする
  • SSHを使用してサーバーにログイン
  • 浮気停止
  • アップロードされたファイルのいくつかのコピーを作成して移動します。
  • トムキャットスタート

2番目のサーバー(現在12台のサーバー、増え続ける)で同じファイルを使用して同じプロセスを繰り返します。

サーバーのリストを繰り返しながら、これらすべてを実行するスクリプトを作成することは可能ですか?

どうすればいいですか?好ましくは、このソリューションには何もインストールする必要はありません。会社のほとんどの人はMacBookで作業していますが、Windows仮想マシンもたくさんあります。

理想的には、単に更新するサーバーを追加/削除してサーバーのリストを変更するだけです。しかし、同じ作業を12回実行する時間を節約するソリューションは非常に感謝しています。 :)

答え1

これにはいくつかの解決策があります。手順を手動で制御し、同時に実行しますか?見てコンピュータセキュリティゲートウェイ(Linuxシステムから来る場合)またはスーパーパテ(Windowsシステムから来る場合)すべてを自動化したい場合は確認してください。予想される

答え2

@デイブ

スクリプトによると、SSH経由で実行できます。

for server in s1 s2 s3; do
    ssh $server "command one; command two; ..."
done

または複数の呼び出しに分割します。

for server in s1 s2 s3; do
    ssh $server command one
    ssh $server command two
    ...
done

ただ通り過ぎて、答えにこれを追加してみてください。

答え3

自分に好意を与えて確認してください。アンシプール。これがまさにあなたに必要なようです。 SSHを使用して簡単に拡張できるので、必要に応じてリストにサーバーを追加するだけです。シナリオの作成方法を学ぶには午後に時間がかかりますが、今後数え切れないほど多くの時間を節約できます。

答え4

他の人が述べたように、複数のシステムを管理するために設計されたツールがありますが、純粋なbashソリューションの場合はforループを作成し、sshを介していくつかのノードでコマンドを実行できます。

ホスト1とホスト2がこれを実行したいndoのホスト名であるとします。

for node in host1 host2; do
    scp /tmp/script.sh user@$node:/tmp/script.sh
    if [[ "$?" == "0" ]];then #checks that last command didn't return an error
        ssh -oBatchMode=yes user@$node /tmp/script.sh
    fi
done

このソリューションを使用する予定の場合は、毎回パスワードを入力する必要がないようにSSHキーを設定することをお勧めします。 BatchModeオプションを使用すると、入力を待つのではなくスクリプトをスキップし、これが望ましいかどうかを判断できます。

関連情報