web-dev-qa-db-ja.com

Linux-一度に多くのマシンで同じコマンドを実行する

私はたまに同じコマンドを実行する必要がある約12のLinuxボックスを持っています。これを行うには、各マシンにログオンしてコマンドを1つずつ実行するより簡単な方法(または自動化された方法)がありますか?これは常に同じコマンドではなく、事前設定された時間でもないため、cronのようなツールには理想的ではありません。

39
Chris Bunch

うーん、たぶん pconsole はあなたが望むツールです。

12
Node

ClusterSSH もあります。わかりやすい名前を付けてください!

15
Jörg W Mittag

pssh および dsh も見落とさないでください。どちらも、@ Philip Durbinが述べたgshによく似ています。

8
pjz

Capistrano を試してみてください。元々はRailsデプロイメントツールですが、リモートマシンで多くのことを実行できるようになりました。

複数のマシンを管理するためのより完全なアプローチについては、 Chef を試してください。

8
rkj

Ansibleにはアドホックコマンドを実行する機能があり、完全な構成管理を実行するように拡張することもできます。グループに基づいて一致する機能は優れています。

http://docs.ansible.com/intro_adhoc.html

8
Robert

あなたはここでPuppetをチェックアウトする必要がありますlinux.com article セットアップと使用

8
trent

私はコピーアンドペーストすることになると思います Stack Overflowからの私の答え 、これは人々が好むようでした。 。 。


先日、一度に多くのサーバーでコマンドを実行する方法の問題がPerlメーリングリストで取り上げられました。同じ提案を行います 私はそこに与えました 、gshを使用することです http://outflux.net/unix/software/gsh

gshは「for box in box1_name box2_name box3_name "ソリューションはすでに提供されていますが、gshの方が便利だと思います。web、db、RHEL4、x86_64などのグループにサーバーを含む/ etc/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を含む)のリストが含まれています。 カピストラーノ はすでに言及されており、(私が理解しているところから)そのリストに含まれている可能性もあります。

6
Philip Durbin

KDEデスクトップを使用している場合、konsoleには「すべてのセッションに入力を送信」オプションがあります。これは、同じコンソールウィンドウで開いたすべてのセッションに適用されます。

5
rgmarcha

ssh [user@]hostname [command]し、ホスト名をループします。

5
Jason V.

Funcもご覧ください。 Funcを使用すると、モジュールアーキテクチャを使用して、パッケージの処理からコマンドの実行など、システムのさまざまな側面を制御できます。これは、SSLを介したクライアント/サーバーモジュールで機能し、かなり柔軟な認証スキームも備えています。

4
Stick

すでにtmuxユーザーであれば、 tmux-csshTMUX-C(luster)-SSHの略)をお楽しみいただけます。サーバー名のリストを指定すると、新しいtmuxウィンドウが開き、独自のペインで各サーバーに対してSSHセッションが開かれます。すべてのキーストロークが各ウィンドウにコピーされます。ホストの数によっては、出力が読みにくい場合があります。

4
appleshampoo

ClusterSSHを使用しましたが、動作します。ただし、特定の数の端末を超えると、拡張性が低下します。

誰もxargsについて言及していないことに驚いています。 Xargsはほとんどの場合に最適です。実際、とても快適になっているので、clustersshを使用することはもうありません。

echo -n Host1 Host2 Host3 Host4|xargs -d" " -n1 -P30 -I+ ssh + "Sudo service Apache2 restart"

(すべてのWebホストでApacheを再起動します。)

4
JDS

その他のツールは次のとおりです。

RunDeckは、軽量のControlTierとしても記述できます。

これらのツールは、クラスターシェルを提供するだけでなく、Webフロントエンドも提供し、将来の使用のためにジョブを保存できます。

3
Christian

Cluster SSH(cssh)を試すこともできます。まだ使っていませんが、LinuxJournal.comに「複数のサーバーを効率的に管理する」という記事があり、それについて説明しています。

2
Brad Beyenhof

他の回答で言及されているコマンドを使用した例をいくつか示します。

pdsh

数値の範囲をとることができ、最初にホスト名が出力されますが、実際にはmaintainのようです。

最も単純なバージョン:

pdsh -w hostname echo done

出力:

hostname: done

より複雑な例:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

出力:

hostname8: done
hostname7: done
otherhost: done

mac:brew install pdsh

dsh

dsh -m user@Host,user@Host --remoteshell ssh --concurrent-Shell -- "sleep 5 && echo done"

リモートシェルの設定が必要です。それ以外の場合は、「rsh」が使用されますが、使用できない場合もあります。

mac:brew install dsh

pssh

pssh -i -H user@Host -H user@Host "sleep 5 && echo done"

また、オプションで、ファイルからマシンのリストを取得することもできます。

ここに例を追加してください。コミュニティウィキです。

mac:brew install pssh

クラスターSSH

クラスターSSH(「macのみのバージョン」には明らかに2つのバージョンがあります here )は実際に「実際のターミナル」を開き、その下部に大きなターミナルがあり、他のすべてに入力を送信します。つまり、複数に送信するUIのようなものです。

例:

csshX hostname0[1-2] hostname3次に赤いボックスに入力すると、ポップアップする各ホストウィンドウに、ホストごとに1つ表示されます。

mac:brew install csshx(古いバージョンですが、まだ機能します)

brew install ansible FWIWもあります

1
rogerdpack

シンプルで非常に強力なdishを使用してください!このスクリプトは私の人生を変えました:)それらすべてを支配する1つのスクリプト!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

勤勉なシェル「ディッシュ」は、ssh/rsh/telnet/mysqlを介して複数のシステムで同時にコマンドを実行します。数百のノードでのパスワードの変更、構成の更新、ファイルのコピー、ステータスの確認などが簡単になります。 DishはIBMの「dsh」(分散シェル)に似ていますが、さらに、認証を必要とするコマンドをリモートで実行できます。 ClusterIt、ダンサーのシェル、並列分散シェル、C3などの分散シェル(または同様のツール)を含む他のオープンソースパッケージと比較すると、ディッシュは、柔軟なソリューションが必要な場合にスリムで使いやすいリモートシェルラッパーです。ここで料理のマニュアルページをオンラインで閲覧できます。

1
Guillaume