「Groovyを使って、SSH接続してみる」

 最近、Groovyにハマっている。Groovyとは何かというのは、Wikipediaを見たり、Googleで検索すれば出てくるから割愛。
 Groovyの名前は知っていたけど、あまり気にしてなかった。でも使ってみたらかなり良くて、もっと早く試しておけば良かったとちょっと後悔。

必要なもの

 Groovyのインストール方法は省略。Windowsであればインストーラがあるし、Linuxであっても圧縮ファイルを展開して、環境変数とパスを設定するだけなので、それほど難しくないです。
 重要なのは、二つ目のライブラリ。DLしたら、圧縮ファイルの中に入っているライブラリを、GROOVY_HOME/libの下にコピーする。これで準備完了。

サンプルソース

import ch.ethz.ssh2.Connection
import ch.ethz.ssh2.StreamGobbler
import ch.ethz.ssh2.SCPClient

def hostname = "192.168.0.2"
def username = "username"
def password = "password "

def conn = new Connection(hostname)
conn.connect()
conn.authenticateWithPassword(username, password)

def sess = conn.openSession()
sess.execCommand("uname -a && date && uptime && who")
def stdout = new StreamGobbler(sess.getStdout())
new BufferedReader(new InputStreamReader(stdout)).eachLine { line ->
  println line
}

sess.close()
conn.close()

感想

 このサンプルは、元々Ganymed SSH2 for Javaに添付されているJavaのコードをGroovyに置き換えた物です。せっかくGroovyで書くのだから、よりGroovyらしさを心掛けました。
 ここでは"uname -a && date && uptime && who"をリモートコマンドとして実行し、結果を標準出力に表示します。
 Ganymed SSH2 for Javaは、他にも公開鍵による接続、SCPによるファイルのやりとりなども出来ますので、JavaのコードからSSH接続したい場合には、中々良い感じです。


 Groovyは、ライブラリの使い方を試すという目的であれば、非常に完結に書くことが出来ます。Javaをメインで使っている人は、Groovyは知っておいても損は無いです。あるいはJRubyでも同様のことは出来ると思いますから、そちらで試してみても良いかもしれません。
 Javaのライブラリを、Javaで書くよりも簡潔に書くというのは、試してみると結構やみつきになります。

参考

内容とは直接関係ないけど、以下の本も中々面白かったです。Groovyについての特集もあります。

スクリプティング with Java

スクリプティング with Java