2011年08月13日

SSH Worker:複数のSSH/SFTPサーバに並列実行して楽をする?

管理するサーバの数が増えてくると、何かを調べたり、インストールしたいと思ったときには結構な労力が必要で、Capistranoなどの自動化アプリケーションを使ったりしますよね。ただ時間がたつとそのツールの操作・設定方法も忘れるタイプの人間なので、単純にSSH/SFTPが複数のサーバに対して並列して実行できるのが一番役立つかと思いSSH WorkerというピュアJavaのデスクトップ・アプリケーションを作ってみました。

13

ダウンロード


こちらからダウンロードします。

59

ピュアjavaですが、Windowsでも使いやすいようにexeも用意しておきました。
jarファイルをダウロードした人はjavar -jarで起動します。

$ java -jar SshWorker-b0.9.jar

49


ホスト定義ファイルの用意


起動しただけでは使えないので管理サーバ(ホスト)の一覧ファイルを作ります。
これはCSV形式で次のようなフォーマットで用意します。

#Region, Group, Type, host[:port], user, password, encoding(UTF8/EUC_JP/etc), nickname
自宅, 開発, Web, 192.168.1.100:22, root, password, UTF8, Apache1
自宅, 開発, DB, 192.168.1.101, root, passowrd, UTF8, MySQLサーバ1
自宅, 開発, APP, 192.168.1.102, root, password, UTF8, APPサーバ1

1)Regin
 最も大きな集合を表します。場所などの名前を指定します。

2)Group
 Region内の集合を表します。サービス、部署などの名前を指定します。

3)Type
 ホストの役割を表します。FILEサーバ、DBサーバ、Webサーバなど。

4)host
 ホストのIPアドレス又はホスト名を指定します。SSHが22番ポートでは無い場合、”:”で区切ってポート番号を指定出来ます。

5)user
 SSHログインID

6)password 
 SSHパスワード(現時点では鍵ファイルによる認証は非対応です)

7)encoding
 ホストの文字コードを指定します。Java I/O形式で指定して下さい。

8)nickname
 画面に表示する名前。空でもかまいません。指定すると優先的に画面表示に使われます。
 (hostの値がIPアドレスで見た目の判断が難しい場合に利用)


接続操作


ホスト定義ファイルの準備が出来たらアプリケーションを起動し、画面左上にあるインポート・ボタンをクリックします。

07

するとファイル選択画面が表示されるのでホスト定義ファイルを指定します。

15
※ファイル内で日本語を使っている場合、文字コードの指定を忘れずに。

すると、画面左側のホスト・ツリーにリージョン、グループ、タイプに分かれてホストの一覧が表示されます。

42

末端(リーフ) はホスト(SSH/SFTPサーバ)のアイコンですが、まだ接続していないので赤いランプがついています。
ツリー上の何れかの場所で右クリックすると、「接続」/「切断」メニューが表示されるので、接続したいツリー上のポイントで「接続」を選択します。

39

するとホストのアイコンがグリーンに変わりSSH接続完了。
 
 52

ちなみに、ツール上では無い部分(空白)で右クリックすると、選択メニューが表示され、

25

 表示されるメニューからリージョン、グループ、タイプ、ホストを選択して接続、切断することも可能です。

36

グループやタイプだけを指定すると、特定のグループ/タイプだけに接続、切断します。


SSHコンソール


接続出来たらSSHコンソールをクリックしましょう。ここに並列に実行したいコマンドを入力します。
ここではディスクの容量を確認したいので、SSH> df -h と入力します。

12

Enterキーを押すと、

50

接続しているホストに並列実行した結果が表示されます。
対話的なコマンドは基本終了が検知できないので実行しないでください・・・、”Password:”や”(yes/no)?”が出力された場合だけは終了と判断してプロンプトが戻ります。

これがあればサーバのログに何かエラーが出力されていないか?、と思った時にも”SSH> grep ERROR /var/log/messages | wc -l”と入力すれば何十台のサーバでも一度に確認できる訳です。
(作ってる途中でホントに楽かなぁ、という疑問も出たんですが・・)

コンソール上で右クリックすると幾つかメニューが表示されますが、 この中にある「ファイルからコマンド実行」を選択してコマンドが列挙されたファイルを選択すると、複数のコマンドを一括で実行出来ます。

28

   <ファイル例(#で始まる行はコメントと判断します)>
df -h
uptime
free

これはファイルをコンソール上にドラッグ&ドロップしても同じ動きになります。

接続している全てのサーバでは無く、特定のグループ、タイプに所属するサーバだけにコマンドを実行したい場合には、画面上部にあるコンボ・ボックスで条件を選択しておきましょう。

12


尚、もし、対話的なコマンドを実行してしまいプロンプトが戻ってこなくなったら画面左上にある「CTR+C」ボタンを押して下さい。リモート・ホストにCTR+Cを送信します。

36


SFTPコンソール


もう一つあるのがSFTPコンソールです。

16

SFTPコンソールではファイル単位で並列にPUT/GETが出来ます。

まず、コンソールをクリックしてP(PUT)かG(GET)を入力して下さい。P又はGが入力されると自動的に補完されます。ここではPUTで説明します。

PUTの場合、次にホストに送るファイルを指定します。ドラッグ&ドロップするか右クリックして表示されるメニューから「ファイル又はディレクトリを選択」を選んで送信するファイルを選択して下さい。

53

最後に送信先のディレクトリ(ファイル名まで指定しても良いですが)を指定してEnterキーを押します。

43

すると、並列(最大10台同時)にSFTPによるファイルの転送が始まります。

13

これは便利な気がしますね。

最後にGETです。ここでは/var/log/messagesファイルを取得してみます。
書式は GET   [リモートのファイル]   [ローカルのディレクトリ] です。

36

これだと、ローカルでファイル名が同じで上書きされてしまいそうですが・・・。

32

ローカル側では取得したファイル名にホストの表示名を+して保存するので大丈夫なのです。

ご意見・ご要望はブロクのコメント欄まで!


Googleを支える技術 ‾巨大システムの内側の世界 (WEB+DB PRESSプラスシリーズ)
西田 圭介 
技術評論社 
売り上げランキング: 68379


[24時間365日] サーバ/インフラを支える技術 ‾スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
安井 真伸 横川 和哉 ひろせ まさあき 伊藤 直也 田中 慎司 勝見 祐己 
技術評論社 
売り上げランキング: 9313



Posted by netbuffalo at 13:11│TrackBack(0)Java | ネットワーク


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/3467839
この記事へのコメント
4
デルの従業員として私は、サーバーに関するあなたの記事が非常に印象的だと思います。私は、サーバーがネットワークリソースを管理するネットワーク上のコンピュータまたはデバイスだと思う。
Posted by サーバ at 2011年09月06日 21:04