DSH(分散シェル)を使用して複数のマシン間でLinuxコマンドを実行する


システム管理者は、多数のマシンを短時間で、できればできるだけ実行を少なくして監視および管理できることの重要性を十分に理解しています。小規模なクラウド環境であろうと、巨大なサーバークラスターであろうと、コンピューターを一元管理する機能は不可欠です。

これを部分的に実現するために、ユーザーが複数のマシンでコマンドを実行できるDSHと呼ばれる気の利いた小さなツールの使用方法を紹介します。

また読む:Pssh –複数のリモートLinuxサーバーでコマンドを実行する

DSHとは何ですか?

DSHは「DistributedShell」または「Dancer’s Shell」の略で、Linuxのほとんどの主要なディストリビューションで無料で入手できますが、ディストリビューションでパッケージリポジトリに提供されていない場合は、ソースから簡単に構築できます。ソースはで入手できます。

  1. http://www.netfort.gr.jp/~dancer/software/dsh.html.en

LinuxにDSH(分散シェル)をインストールする

このチュートリアルの範囲では、Debian/Ubuntu環境を想定します。別のディストリビューションを使用している場合は、パッケージマネージャーの代わりに適切なコマンドを使用してください。

まず、aptを介してパッケージをインストールしましょう:

$ sudo apt-get install dsh

このメソッドは、Debianを使用しておらず、ソースtarボールからコンパイルしたい人向けです。まず、「libdshconfig」をコンパイルしてインストールする必要があります。

# wget http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.10.cvs.1.tar.gz
# tar xfz libdshconfig*.tar.gz 
# cd libdshconfig-*
# ./configure ; make
# make install

次に、dshをコンパイルしてインストールします。

# wget http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.22.0.tar.gz
# tar xfz dsh-0.22.0.tar.gz
# cd dsh-*
# ./configure ; make 
# make install

メインの設定ファイル「/etc/dsh/dsh.conf」(Debianの場合)と「/usr/local/etc/dsh.conf」(Red Hatの場合)は非常に単純ですが、rshは暗号化されていないプロトコルであるため、 SSHをリモートシェルとして使用します。選択したテキストエディタを使用して、次の行を見つけます。

remoteshell =rsh

そしてそれを次のように変更します:

remoteshell =ssh

あなたがそうすることを選択した場合、あなたがここに渡すことができる他のオプションがあります、そしてそれらはdshのmanページで見つけることがたくさんあります。今のところ、デフォルトを受け入れて、次のファイル/etc/dsh/machines.list(Debianの場合)を見ていきます。

Red Hatベースのシステムの場合、「/ usr/local/etc /」ディレクトリに「machines.list」というファイルを作成する必要があります。

ここでの構文は非常に簡単です。マシンの資格情報(ホスト名、IPアドレス、またはFQDN)を1行に1つずつ入力するだけです。

注:複数のマシンに同時にアクセスする場合は、すべてのマシンでキーベースのパスワードなしのSSHを設定することをお勧めします。これにより、アクセスが容易になるだけでなく、セキュリティ面でも、マシンが強化されます。

私の「/etc/dsh/machines.list」または「/usr/local/etc/machines.list」ファイルには次のように書かれています。

172.16.25.125
172.16.25.126

アクセスしたいマシンの資格情報を入力したら、すべてのマシンに対して「稼働時間」などの簡単なコマンドを実行しましょう。

$ dsh –aM –c uptime
172.16.25.125: 05:11:58 up 40 days, 51 min, 0 users, load average: 0.00, 0.01, 0.05
172.16.25.126: 05:11:47 up 13 days, 38 min, 0 users, load average: 0.00, 0.01, 0.05

では、このコマンドは何をしましたか?

ものすごく単純。まず、dshを実行し、「– a」オプションを渡しました。これは、「/ etc/dsh /machines.list」にリストされているマシンの「ALL」に「uptime」コマンドを送信することを示しています。

次に、「– M」オプションを指定しました。これは、「マシン名」(「/etc/dsh/machines.list」で指定)をuptimeコマンドの出力とともに返すことを示しています。 (多数のマシンでコマンドを実行する場合の並べ替えに非常に役立ちます。)

「–c」オプションは、「実行するコマンド」、この場合は「稼働時間」を表します。

DSHは、「/ etc/dsh/groups /」ファイル内のマシンのグループで構成することもできます。ここで、は「/etc/dsh/machines.list」ファイルと同じ形式のマシンのリストを含むファイルです。グループでdshを実行する場合は、「-g」オプションの後にグループ名を指定します。

Red Hatベースのシステムの場合、「/ usr/local/etc /」ディレクトリに「groups」というフォルダを作成する必要があります。その「groups」ディレクトリに、「cluster」というファイルを作成します。

たとえば、「cluster」グループファイル「/ etc/dsh/groups/cluster」または「/ usr/local/etc/groups/cluster」にリストされているすべてのマシンで「w」コマンドを実行します。

$ dsh –M –g cluster –c w

DSHははるかに高い柔軟性を提供し、このチュートリアルは表面を傷つけるだけです。コマンドの実行の他に、DSHを使用して、ファイルの転送、ソフトウェアのインストール、ルートの追加などを行うことができます。

大規模なネットワークの責任を負っているシステム管理者にとって、それは非常に貴重です。