web-dev-qa-db-ja.com

サーバーのリストをループするより良い方法

サーバーのリストをループして何らかのアクションを実行することを定期的に行っています。例えば:

for s in `cat servers.txt` ; do
    echo; echo $s
    ssh $s 'do something'
done

(シェルの観点から)cat servers.txtよりも簡単な方法があるかどうか疑問に思っています

はい、私はmcollective、capistranoなどのツールについて知っています-私はmcollectiveの問題を修正するためにこれを頻繁に行っています:-)

6
Sonia Hamilton

私のすばやく汚い... servers.txtには、1行に1つずつ一連のホストまたはIPがあります。

#!/bin/bash

SERVER_LIST=/path/to/servers.txt

while read REMOTE_SERVER
do
        ssh $REMOTE_SERVER "do_something_cool"
done < $SERVER_LIST
5
ewwhite

ClusterSSH を使用します。
それはたくさんの小さなシェルを開き、それらすべてに同時にタイプすることができます。多くのサーバーで同じコマンドを実行したいが、それでも出力を見たいときに本当に便利です。
私はそれを次のように使用します:clusterssh $(~/get-servers.sh)、しかし明らかにあなたはclusterssh $(cat servers.txt)のようなことをすることができます
結果は次のようになります:

enter image description here

Debianパッケージとしても入手できます。

6
Nitz

自分でお願いして、このために設計されたものを使用してください。あなたはすでにmcollectiveについて知っていますが、あなたも私も、そのためには何らかのインフラストラクチャが必要であることを知っています。人形やシェフもそうです。

clustersshparallel ssh および dancer Shell は、Shell forループに対する小さな単純な改善です。彼らはより多くのインフラストラクチャを必要としません。

しかし、 ansible もあり、それを実行できますが、いくつかのステップで再利用可能な「プレイブック」を作成することもできます。 sshdに加えてpythonをインストールする必要がありますが、実際には個別にインストールする必要がなく、いつでも利用できます。

Ansibleは私が試した唯一の構成管理システムであり、展開およびオーケストレーションツールとしても適切に機能します(パペットにはmcollectiveが必要で、おそらくcapistrano/fabricが必要です...)

(はい、PuppetとChefとその他すべては中央サーバーなしで実行できますが、管理するホストにパッケージをインストールする必要があります。これはansibleには必要ありません)

4
ptman

以前のインフラストラクチャが必要かどうかに関係なく、この目的のために設計されたツールを使用せずに、さまざまなサーバーにわたって単純なタスクを実行するには、 mussh と呼ばれる単純なシェルスクリプトを使用できます。多くのディストリビューションでパッケージとして配布されています。

ホストのリスト、コマンドのリストを使用してそれを呼び出し、両方にファイルに保存し、ssh-agent統合、プロキシサポートなどのかなり多くのオプションを使用して確認できます。チェック manpage すべての詳細について。

例は次のように単純です。

$ mussh -H Host_list.txt -C command_list.txt
4
dawud

Xargsを使用してこれらのsshセッションを並列化する方法は次のとおりです。

cat servers.txt | xargs -IH -n1 -P0 ssh H 'some command to run'

-nまたは-fオプションをsshに追加して、標準入力を/ dev/nullからリダイレクトするか、セッションをバックグラウンドで実行することもできます。ホストごとにパスワードを入力する必要がある場合、これはあまり役に立ちませんが、sshキーを使用している場合、これは非常にうまく機能します。

3

Parallel-sshの使用を検討しましたか? https://code.google.com/p/parallel-ssh/

Mcoまたはパペットの設定が壊れている場合、私は通常、その使用にフォールバックします。これは管理する別の依存関係ですが、管理するボクセンの大規模な艦隊がある場合は完全に価値があります-タンデム/パラレルで作業するマシンの数を選択できる、または一度に1つずつ実行することもできるという追加のボーナス付きあなたはbashに慣れています。

2
Andrew

私の回答を元に戻しました。あなたが何を求めているのかははっきりしていませんが。


Ssh、scp、rsyncの並列バージョンを提供する parallel SSH というプロジェクトがあります。

したがって、利点は、シェルスクリプトを実行する必要がなく、コマンドを実行するサーバーのリストを提供するだけで、並列に実行できることです。

これは、実行するsshコマンドのセットが長時間実行されている場合に非常に便利です。これにより、すべてのコマンドが並行して実行され、速度が大幅に向上する可能性があります。

例えば.

parallel-ssh -h myhosts.txt "echo 'hello world'"
0
Matt