Java SSH ライブラリ¶
はじめに¶
Javaで、SSH(Secure Shell)を扱うライブラリについてのメモです。
SSHは、ネットワーク上のコンピュータに対してリモートから安全にコマンド環境(シェル環境)やファイル転送を実現する技術です。パスワード認証、公開鍵認証の提供、通信データの暗号化により、オープンなネットワーク上に安全な接続を確立します。
Javaでは、標準でSSHをサポートするAPIを提供していないので、サードパーティ製ライブラリを利用することが多いです。
SSHを提供するライブラリ¶
インターネットで公開されているSSHライブラリの情報を整理します。
ライブラリ一覧¶
No | Name | License | Developer | Latest Version |
---|---|---|---|---|
1 | Maverick Synergy Java SSH API | Dual license of LGPLv3 and commercial | JADAPTIVE Limited | 3.0.10@2023-04-25 |
2 | Apache Mina SSHD | Apache 2.0 | Apache MINA Project | 2.11.0@2023-10-20 |
3 | Ganymed SSH-2 for Java | BSD 3 Clause | ETH Zurich -> Software AG | 263@2020-07-21 |
4 | JSch | BSD 3 Clause | JCraft | 0.1.55@2018-11-22 |
5 | IPWorks SSH | Commercial | /n software | 22.0.8669@2023-09-26 |
6 | sshj | Apache 2.0 | Jeroen van Erp | 0.37.0@2023-10-11 |
Maverick Synergy Java SSH API¶
- オープンソースソフトウェアで、LGPL v3と商用ライセンスのデュアルライセンスで提供されます。
- SSHクライアント用APIとSSHサーバー用APIのライブラリが分離して提供されています。
- java.nioライブラリを使った実装となっており、パフォーマンス向上を図っています。
- ドキュメントも充実しています。
https://jadaptive.com/app/manpage/en/category/1559751
Apache MINA SSHD¶
- オープンソースソフトウェアで、Apache License 2.0ライセンスで提供されています。
- SSHクライアント・サーバー用のAPIライブラリです。
- slf4j-apiを使用しています(依存性あり)。
- java.nioライブラリを使った実装です。
- APIはAutoClosable実装なので try with resources構文が使えます。
- ドキュメントは、githubのページに記載あります。
https://github.com/apache/mina-sshd
Ganymede SSH-2 for Java¶
- スイス連邦工科大学チューリッヒ校(ETH Zurich)のIKSグループで開発、ETH Zurichがメンテナンスを中止して以降はフォークが作られ、現在はSoftware AG社のオープンソース取り組みの一つとしてメンテナンスされています。
JSch¶
- BSD 3 Clause ライセンスで提供されています。
- ソースコードは公開されていますが、JCraft社で開発・メンテナンスされています(≠オープンソースプロジェクト)。
IPWorks SSH¶
- 商用製品で、開発者1人 $1,249(配布は自由)
sshj¶
- オープンソースソフトウェアで、Apache 2.0ライセンスで提供されています。
- バイナリは、Maven Centralリポジトリから入手します。
プログラミング¶
Maverick Synergy Java SSH API¶
Java SSH Client - Maverick Synergy
参考文献・記事¶
ブログ等¶
- SSH Connection With Java - Baldung
JschとApache MINA SSHDで、sshリモートコマンド実行の簡単なサンプルコードを紹介。どちらもInputStreamでコマンド文字列を送り、OutputStreamでコマンド実行結果の文字列を受け取る例です。違いについても言及あります。(Jschはコマンド実行結果のみ取得、MINA SSHDはコマンド実行時のコンソール出力も含めて取得とのこと)