検索
特集

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

複数のリモートマシンを管理しなければならないシステム管理者は多い。そんな悩める管理者のために、並行処理型のSSHツールを3種紹介しよう。それぞれに長所があり、あなたの悩みをきっと解決してくれる。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
SourceForge.JP Magazine

Parallel ssh(pssh)

 Parallel sshプロジェクトは、並行処理版のシェル(pssh)と、scp、rsync、killのそれぞれの並行処理版(pscp、prsync、pnuke)で構成されている。

 psshは、openSUSE用の1クリックインストールパッケージがあるほか、Ubuntu Hardy UniverseおよびFedora 9のリポジトリにも登録されている。わたしはFedora 9のリポジトリの64ビット版パッケージを利用した。

 Parallel sshのコマンドは「 command -h hosts-file options 」という形式で指定する。hosts-fileは、コマンドを実行する全ホストを記述したファイルだ。例えば、次の実行例の最初のpsshコマンドでは、ホストp1とp2で、dateコマンドをユーザーbenで実行する。オプションの-lは、リモート・マシンへのログインに使用するユーザー名を指定するパラメータだ。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 通常は、リモートホストの標準出力の内容は画面に表示されない。最後の例のように-Pオプションを指定すると、リモートホストの出力と終了ステータスの両方が表示される。複雑なコマンドを実行する場合は、代わりに-iオプションを指定するとよい。そうすると各リモートホストからの出力がホスト名ごとにグループ分けして表示される。各ホストからの出力が混在する形でずらずらと表示されるより見やすいはずだ。psshでは、各リモートホストの出力内容を保存するディレクトリパスを--outdirオプションで指定することもできる。出力はホストごとに別々のファイルに保存され、リモートマシンのホスト名がファイル名として付けられる。

 --timeoutオプションでは、コマンドの完了を待機する時間を指定できる。デフォルトは60秒だ。ホスト上でコマンドの実行が60秒以内に終了しなかった場合、エラーとみなされ、その旨が次の例のように表示される。この動作で問題があるようなら、タイムアウト値を十分な長さ(例えば24時間)に設定すればよい。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 pscpコマンドにも、-h、-l、--timeoutの各オプションを同様に指定できる。さらに、--recursiveというオプションもある。サブディレクトリを再帰的にコピーするオプションだ。コマンドの末尾には、コピーの対象となるローカルパスとリモートパスを指定する。次の例を見てほしい。最初のpscpコマンドでは、単一のファイルを2つのリモートホストに対して同時にコピーしている。その次のsshコマンドでは、コピーしたファイルがリモートホストp1に存在することを確認している。その次のpscpコマンドはエラーになっている。長いエラーメッセージが表示されているが、これを見てもエラーの理由は不明だ。だがここでは、ディレクトリを上書きコピーしようとしたことが原因と考えられるので、--recursiveオプションを追加してコマンドを再度実行したところ、今度はうまくいった。最後のsshコマンドは、このディレクトリがリモートホストp1に存在することを確認している。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 prsyncコマンドでは、rsyncのコマンドラインオプションの一部しか使用できない。特に、verboseオプションやdry-runオプションで詳細な処理内容を確認できない点は要注意だ。次の例では、example-treeをリモートホストの/tmp/example-treeに対しrsyncで同期している。先ほどのpscpの最後の実行例と似た形式だ。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 prsyncコマンドと同様の処理は、psshコマンドと通常のrsyncコマンドを組み合わせるやり方でも可能だが、prsyncコマンドの方が大きなメリットがある。コマンドラインが簡単である点と、ローカルマシンからリモートホストに直接同期できる点だ。psshとrsyncを組み合わせるやり方では、rsyncは各リモートホストで実行することになるので、同期のためには、リモートホストからローカルマシンへの接続が必要になる。

 pslurpは、pscpのちょうど反対のようなコマンドだ。すべてのリモートマシンからファイルやディレクトリを取得し、ローカルマシンにコピーする。次の例では、リモートマシンp1とp2からexample-treeディレクトリを取得し、/tmp/outdirに保存している。-rオプションは--recursiveの短縮形だ。この実行例から分かるように、各リモートホスト名と同じ名前のディレクトリがそれぞれ新規作成され、リモートのexample-treeディレクトリのコピーが、pslurpの最後の引数で指定したローカルディレクトリ名で作成される。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 Parallel sshでは、環境変数を使って処理を簡素化することもできる。PSSH_HOSTSという変数では、-hオプションの代わりにホストファイルを指定でき、PSSH_USERという変数では、psshの-lオプションと同様に、ログインに使用するユーザー名を指定できる。

Copyright © 2010 OSDN Corporation, All Rights Reserved.

ページトップに戻る