CLOVER🍀

That was when it all began.

Javaで使えるSSHライブラリ

最近、仕事でJavaからSSHを使用することが多いのですが、ちょっとどんなライブラリがあるか調べることになりまして…せっかくなので、結果をまとめてみることにしました。

割と有名どころが多いので、知っている方はそれほど大した情報にはならないと思いますが…。

では、いってみましょう。

JSch

これが1番有名なライブラリではないでしょうか?妙にバージョンが低い割には、Ant、Eclipse CVSプラグインMaven Wagonなどで利用されているようです。

名前 JSch
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) 0.1.48
利用可能な主な機能 SSH、SFTP、SCP(リモートコマンド実行の限定サポート)、公開鍵認証
プロジェクトサイト http://www.jcraft.com/jsch/
Maven Central Repositoryへの登録 登録済

欠点は、SCPのサポートが薄いことと、ドキュメントがほぼ皆無なことでしょうか…。

Ganymed SSH-2 for Java

JavaSSH関連の調べ物をしていると、JSchの次に目につくライブラリです。

名前 Ganymed SSH-2 for Java
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) build250
利用可能な主な機能 SSH、SFTP、SCP、公開鍵認証
プロジェクトサイト http://www.cleondris.ch/opensource/ssh2/
プロジェクトサイト(旧) http://www.ganymed.ethz.ch/ssh2/
Maven Central Repositoryへの登録 登録済(ただし、旧サイトでのbuild210まで)

SCPがJSchより簡単に使えるので、JavaでSCPを使いたい場合はこちら?
ただ、メンテナンス状況が変わったようで、Orion SSH2にフォークされたり、Maven Central Repositoryへは最新版は登録されていないので、今後の扱いは?ですね。

sshj

Stack Overflowのスレッドで見つけました。
http://stackoverflow.com/questions/5097514/jsch-or-sshj-or-ganymed-ssh-2
http://stackoverflow.com/questions/995944/ssh-library-for-java

割と新鋭?

名前 sshj
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) 0.8.1
利用可能な主な機能 SSH、SFTP、SCP、公開鍵認証
プロジェクトサイト https://github.com/shikhar/sshj
Maven Central Repositoryへの登録 登録済

欠点は、やっぱりドキュメントに乏しいところでしょうか…。

Apache MINA SSHD

Apache MINAによるSSHDの実装のようです。他のライブラリと異なり、クライアント側だけではなくてサーバの実装も持ちます。

名前 Apache MINA SSHD
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) 0.7.0
利用可能な主な機能 SSH、SFTP、SCP、公開鍵認証
プロジェクトサイト http://mina.apache.org/sshd/
Maven Central Repositoryへの登録 未登録

サーバ側の実装を含むので少々大掛かりなことと、やっぱりドキュメントには乏しい感じですね。

SSHTools J2SSH

Apache MINA SSHDと同様、サーバを含む実装になります。でも、こちらの方が古株っぽいですね。

名前 SSHTools J2SSH
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) 0.2.9
利用可能な主な機能 SSH、SFTP、公開鍵認証
プロジェクトサイト http://sourceforge.net/projects/sshtools/
Maven Central Repositoryへの登録 登録済

ドキュメントがオンラインで見られないとは…。

Orion SSH2

Ganymed SSH-2 for Javaを元にした、SSHの実装のようです。2006年にGanymed SSH-2 for Javaのメンテナンスが止まってしまったのを機にできたようですね。

名前 Orion SSH2
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) build214
利用可能な主な機能 SSH、SFTP、SCP、公開鍵認証
プロジェクトサイト http://sourceforge.net/apps/mediawiki/orion-ssh2/index.php?title=Main_Page
Maven Central Repositoryへの登録 未登録

Hudsonでも使われているとプロジェクトサイトには書かれていましたけど、なんでMaven Central Repositoryには未登録なんでしょうね?

commons-ssh

commons-sshは、他のライブラリとは違い、上記までに出てきた(Orion SSH2は除く)SSHライブラリのブリッジとなるライブラリです。

SSHTools J2SSH、JSch、Ganymed SSH-2 for JavaApache MINA SSHDのいずれかのインスタンスを指定して、接続を作成するようです。

名前 commons-ssh
プロトコルバージョン SSH v2
最新バージョン(2012/08/18時点) 1.4.1
利用可能な主な機能 SSH、SFTP、公開鍵認証
プロジェクトサイト http://commons-ssh.sourceforge.net/
Maven Central Repositoryへの登録 未登録

どうもSCPは使えないような?JSchのように、コマンド実行してくれってことなのでしょうか?

JSSH

今回載せたライブラリで、唯一SSH v1系のライブラリです。

名前 JSSH
プロトコルバージョン SSH v1.5
最新バージョン(2012/08/18時点) 0.9.5
利用可能な主な機能 SSH、公開鍵認証
プロジェクトサイト http://www.pitman.co.za/projects/jssh/index.html
Maven Central Repositoryへの登録 未登録

ドキュメント皆無、ビルドも自分でしなくちゃいけない感じです。最終更新が2002年なので、もう止まってしまったプロジェクトなんでしょうね。

なお、自分が今回SSHのライブラリを調べていたのは、最初に書いたように仕事で使用するからなのですが、その時に使用するSSHバージョンが1なんですよね。んで、結果、上記の様にSSH v1をサポートするライブラリはほぼない感じです。JSSHは、ドキュメントがなさ過ぎて、すごい困るんですけど…。

あ、商用を含めると、存在するようですよ。
J2SSH Maverick
https://www.javassh.com/products/j2ssh-maverick

それにしても、JavaSSHのライブラリってどれも

  • バージョン低い
  • ドキュメント少なし

ってのが共通ですね。あんまりJavaでやろうという需要はないのかなぁ?