1つのシェルから複数のSSHセッションを同時に実行するツール3種類を試すLeverage OSS(3/4 ページ)

» 2008年11月12日 00時00分 公開
[Ben Martin,SourceForge.JP Magazine]
SourceForge.JP Magazine

Cluster SSH

 Cluster SSHは、Parallel sshとは使い方が少々異なる。単一のターミナルから複数のマシンに対してコマンドを実行するのではなく、クラスタのノードの分だけ別々のxtermが立ち上がり、制御用のウインドウで入力した内容をすべてのノードに送信できるという仕組みだ。

 Cluster SSHは、Ubuntu Hardy UniverseとFedora 9のリポジトリに登録されているほか、openSUSE 11では1クリックインストールで利用できる。わたしはFedora 9のリポジトリの64ビット版パッケージを使用した。

 コマンドラインで接続先のマシンを幾つか指定すると、その数の分だけxtermウインドウが開く。あわせて、Tkウインドウが1つ開き、Cluster SSHの制御や、各xtermウインドウへの入力の送信を行うことができる。例えば、「cssh p1 p2」と指定すると、リモートマシンp1とp2のxtermウインドウと、操作用のウインドウが開く。各xtermウインドウは最初は並んで表示される。

 Cluster SSHの[File]メニューでは、それまでの入力内容の履歴を確認できる。Cluster SSHウインドウが拡張され、入力内容のみを示すテキストエリアが現れる形だ。また、[File]メニューからは、セッションの終了も行える。 Cluster SSHのウインドウを閉じた場合は、セッションも終了され、対応するxtermウインドウがすべて閉じる。

 [Hosts]メニューではウインドウの再整列を行うことができ、各xtermウインドウとメインの制御ウインドウを起動時と同じ表示状態に戻すことができる。また、[Hosts]メニューには、新たなホストへの接続を確立して現在のセッションに加えたり、現在のセッションのいずれかのホストに対する操作の有効と無効を切り替えたりする機能もある。操作の有効と無効を切り替える機能は、複数のマシンに対して管理作業を行うときに、いずれか1つのコマンド実行で特定のマシンを対象外としたい場合に便利だ。例えば、クライアントマシンに対するコマンド実行でiptablesのルールを操作する際にのみ、ファイアウォールマシンを一時的に処理対象から除外できる。

 Cluster SSHには、マシン全体に対して有効な設定ファイルが2つある。/etc/clustersと/etc/csshrcだ。前者はクラスタを構成するマシン(つまり接続先のホストのグループ)を指定するファイル、後者は一般的な設定ファイルだ。また、ユーザーごとの設定を~/.csshrcというファイルに指定することもできる。これと対になる~/.clustersというファイルはないが、~/.csshrcファイル内のextra_cluster_fileという設定ディレクティブで、ユーザー固有の/etc/clustersの場所を指定できる。

 clustersファイルでは、「groupname user1@host1 user2@host2 ...」という形式でグループ名、ユーザー名、ホスト名を指定する。ユーザー名は省略可能だ。その上で、コマンドラインで「cssh groupname」と指定すれば、指定したグループのすべてのホストに接続できる。次の例では、ユーザー固有のclustersファイルを使用し、そのファイルを参照するよう~/.csshrcファイルで指定している。最後の行のコマンドでは、指定のグループの各ホストに各ユーザーで接続している。


# cat /root/.cssh-clusters
rougenet p1 ben@p2
# cat /root/.csshrc
extra_cluster_file = ~/.cssh-clusters
# cssh rougenet

 ホットキーは4種類が定義されている。csshrcファイルでキーの割り当てを変更することも可能だ。標準では、Ctrl-q(現在のセッションを閉じる)、Ctrl-プラス(+)(現在のセッションに新しいホストを追加する)、Alt-n(メインのCluster SSHウインドウがアクティブな状態で各xtermにリモートホスト名を貼りつける)、Alt-r(xtermウインドウを再整列する)という4種類がある。例えばAlt-nの場合は、CSSHウインドウで「echo Alt-n」と入力すると、1つのxtermにはecho vfedora864prx1、もう1つのxtermにはecho vfedora864prx2といった形で、それぞれのホスト名が挿入される。ただし、Cluster SSHを実行しているマシン自身のホスト名を張りつけるためのホットキーはない。その機能もあれば便利だったろうと思う。実行元のマシンからセッションの全ノードに対してrsyncを行う場合などに使えるからだ。

 リモートホストへのログインに使用するユーザーは-lオプションで指定できる。このオプションで指定したユーザー名の方が、clustersファイルで指定したユーザー名より優先順位が高くなる。

 Cluster SSHでは、xterm以外のターミナルを利用することもできる。csshrcファイルのパラメータでターミナルの設定が可能だ。ただ、gnome-terminalやkonsoleをターミナルとして使うのは、単なる「terminal = konsole」といった指定ではうまくいかない。Cluster SSHからターミナルに対し、xtermという前提でオプションが渡されるからだ。わたしが試したところ、「terminal = Eterm」という指定は、代用ターミナルとしてそのままうまくいった。だが、gnome-terminalはそのままでは使えなかった。ターミナルの起動時にCluster SSHから必ず-fontオプションが渡されるといった問題からだ。そのままの指定でうまくいかないターミナルを利用するには、ラッパーとなるスクリプトを作成し、問題なく受け入れられる引数のみを渡すようにするといった対処が必要だ。

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ