web-dev-qa-db-ja.com

SSH経由で複数のサーバーに並行してコマンドをリモートで実行することを自動化するにはどうすればよいですか?

私は似たような質問を少し探しましたが、次のような項目で1つのコマンドまたはおそらくいくつかのコマンドを実行する以外は。

ssh user@Host -t Sudo su -

ただし、基本的に15台のサーバーで一度にスクリプトを実行する必要がある場合はどうなりますか。これはbashで実行できますか?完璧な世界では、これを実現するために、可能な限りアプリケーションのインストールを避ける必要があります。議論のために、10個のホストで次のことを行う必要があるとしましょう。

  1. 新しいTomcatコンテナをデプロイします
  2. コンテナーにアプリケーションをデプロイし、構成します
  3. Apache仮想ホストを構成します
  4. Apacheをリロードします

私はそれをすべて行うスクリプトを持っていますが、それは私がすべてのサーバーにログインし、リポジトリからスクリプトをプルダウンして実行することに依存しています。これがbashで実行できない場合、どのような代替案を提案しますか? Perlなどのより大きなハンマーが必要ですか(Pythonはyum/up2dateのおかげでRHEL環境のすべてのボックスにあることを保証できるのでPythonが好まれるかもしれません)?誰かが私を指すことができれば特にbashで実行できる場合は、役立つ情報があれば大歓迎です。PerlまたはPythonを使用しますが、それらについてもわかりません(作業中です)。ありがとうございます。

19
f4nt

多くの場合、Expectの元のTclバージョンを使用します。あなたはそれをローカルマシンに持っている必要があるだけです。 Perlを使用しているプログラム内にいる場合は、これを Net :: SSH :: Expect で行います。他の言語にも同様の「期待」ツールがあります。

9
brian d foy

CheとYangが示すように、ローカルスクリプトを実行したり、ヒアドキュメントを使用したりできます。

ssh root@server /bin/sh <<\EOF  
wget http://server/warfile    # Could use NFS here  
cp app.war /location  
command 1  
command 2  
/etc/init.d/httpd restart  
EOF 
11
Bash

先日、Perlメーリングリストで、多数のサーバーでコマンドを一度に実行する方法の問題が発生しました。同じ推奨事項を示します そこで提供しました 、つまりgshを使用します。

http://outflux.net/unix/software/gsh

gshは "_for box in box1_name box2_name box3_name_"ソリューションに似ています すでに与えられています ですが、gshの方が便利だと思います。サーバーを含む/ etc/ghostsファイルをweb、db、RHEL4、x86_64などのグループ(man ghosts)に設定し、gshを呼び出すときにそのグループを使用します。

_[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$
_

たとえば、web + dbまたはweb-RHEL4を使用して、ゴーストグループを結合または分割することもできます。

また、shmuxを使用したことはありませんが、 そのWebサイト には、多数のサーバーで一度にコマンドを実行できるソフトウェア(gshを含む)のリストが含まれています。 Capistrano はすでに言及されており、(私が理解していることから)そのリストにも含まれている可能性があります。

9
Philip Durbin

期待を見てください(man expect

私は過去にExpectを使用して同様のタスクを実行しました。

6
antik

paramiko を試すことができます。これは純粋なPythonのsshクライアントです。 sshセッションをプログラムできます。リモートマシンにインストールするものはありません。

使い方についてはこちら すばらしい記事 をご覧ください。

4