警告 | 0.37.0 までの SSHJ バージョンは、CVE-2023-48795 - Terrapin に対して脆弱です。 0.38.0以降にアップグレードしてください。 |
まず、例の 1 つを見てください。 API を快適に操作できることを願っています :)
SSHJ を取得するには、次の 2 つのオプションがあります。
SSHJ への依存関係をプロジェクトに追加します。
SSHJ を自分で構築します。
また、必要に応じて、SSHJ サンプルを実行することもできます。
SSHJ のバイナリ リリースはここでは提供されていませんが、必要に応じて Maven Central リポジトリから直接ダウンロードできます。
Maven を使用してプロジェクトを構築している場合は、次の依存関係をpom.xml
に追加できます。
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
プロジェクトが Maven Central リポジトリを使用する別のビルド ツールを使用してビルドされている場合は、この依存関係をビルド ツールで使用される形式に変換します。
SSHJ リポジトリのクローンを作成します。
Java6 が、強度無制限の Java Cryptography Extensions (JCE) とともにインストールされていることを確認してください。
コマンド./gradlew clean build
を実行します。
examples
ディレクトリには、いくつかのサンプル ケースでライブラリを使用する方法を示す別の Maven プロジェクトがあります。これらを実行する場合は、次のガイドラインに従ってください。
Maven 2.2.1 以降をインストールします。
SSHJ リポジトリのクローンを作成します。
examples
ディレクトリに移動し、コマンドmvn eclipse:eclipse
を実行します。
examples
プロジェクトを Eclipse にインポートします。
サンプルクラスのログイン詳細 (アドレス、ユーザー名、パスワード) を変更して実行してください。
ホストキー検証のための known_hosts ファイルの読み取り
公開鍵、パスワード、およびキーボード対話型認証
コマンド、サブシステム、シェルチャネル
ローカルおよびリモートのポート転送
scp + 完全な sftp バージョン 0 ~ 3 の実装
次のアルゴリズムの実装/アダプターが含まれています。
aes{128,192,256}-{cbc,ctr}
、 aes{128,256}[email protected]
、 blowfish-{cbc,ctr}
、 [email protected]
@openssh.com 、 3des-{cbc,ctr}
、 twofish{128,192,256}-{cbc,ctr}
、 twofish-cbc
、 serpent{128,192,256}-{cbc,ctr}
、 idea-{cbc,ctr}
、 cast128-{cbc,ctr}
、 arcfour
、 arcfour{128,256}
SSHJ は、次の拡張 (非公式) 暗号もサポートしています。 camellia{128,192,256}-{cbc,ctr}
、 camellia{128,192,256}-{cbc,ctr}@openssh.org
diffie-hellman-group1-sha1
、 diffie-hellman-group14-sha1
、 diffie-hellman-group14-sha256
、 diffie-hellman-group15-sha512
、 diffie-hellman-group16-sha512
、 diffie-hellman-group17-sha512
、 diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
、 diffie-hellman-group-exchange-sha256
、 ecdh-sha2-nistp256
、 ecdh-sha2-nistp384
、 ecdh-sha2-nistp521
、 [email protected]
SSHJ は、次の拡張 (非公式) 鍵交換アルゴリズムもサポートしています。 `[email protected]`、`diffie-hellman-group15-sha256`、`[email protected]`、`[email protected] `、 `diffie-hellman-group16-sha256`、`[email protected]`、`[email protected]`、`[email protected] `
ssh-rsa
、 ssh-dss
、 ecdsa-sha2-nistp256
、 ecdsa-sha2-nistp384
、 ecdsa-sha2-nistp521
、 ssh-ed25519
、 ssh-rsa2-256
、 ssh-rsa2-512
hmac-md5
、 hmac-md5-96
、 hmac-sha1
、 hmac-sha1-96
、 hmac-sha2-256
、 hmac-sha2-512
、 hmac-ripemd160
、 [email protected]
[email protected]
、 [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
openssh.com
zlib
および[email protected]
(遅延 zlib)
pkcs5
、 pkcs8
、 openssh-key-v1
、 [email protected]
、 [email protected]
含まれていないものが必要な場合は、追加するのはそれほど難しいことではありません (ぜひ貢献してください!)
SSH実装の比較
Java 8以降
SLF4J 2.0.0
弾む城
問題トラッカー: https://github.com/hierynomus/sshj/issues
フォークアウェイ!
軽減された CVE-2023-48795 - Terrapin
マージ #917: OpenSSH 厳密キー交換拡張機能の実装
マージ #903: 既知のホスト キー文字列の書き込みを修正
マージ #913: リモート ポート転送バッファが際限なく増大するのを防ぐ
テストを JUnit5 に移動しました
マージ #827: 利用可能な場合は [email protected] 拡張機能にフォールバック
マージ #904: OpenSSH キーの ChaCha20-Poly1305 サポートを追加
マージ #899: AES-GCM OpenSSH 秘密キーのサポートを追加
マージ #901: ZLib 圧縮のバグを修正
マージ #898: OpenSSH 秘密キーの不正なファイル処理の改善
統合テストを JUnit5 に書き直しました
マージ #851: SSH_MSG_UNIMPLEMENTED が断続的に発生するキー交換の競合状態を修正
マージ #861: BouncyCastle を無効にした DefaultSecurityProviderConfig を追加
マージ #881: テスト クラスを JUnit Jupiter エンジンに書き直しました
マージ #880: Java 7 バックポート ソケット ユーティリティを削除
マージ #879: カスタム Base64 を java.util.Base64 に置き換えました。
マージ #852: 未使用の bcrypt パスワード ハッシュ メソッドを削除
マージ #874: Java 8 最小バージョン + 依存関係のアップグレード
マージ #876: StatefulSFTPClient
を返すようにnewStatefulSFTPClient
変更
マージ #860: Gradle 7.6.1 へのアップグレード
マージ #838: Curve25519 クラスを X25519 キー合意に置き換えました
マージ #772: jzlib への依存関係を削除
マージ #835: TimeoutException メッセージが改善されました
マージ #815: FreeBSD での authPassword のサポート
マージ #813: isOpen と書き込み呼び出しの間のCHANNEL_CLOSE
を防止します。
マージ #811: 不要な KEXINIT を防ぐためにTransport.isKeyExchangeREquired
を追加
マージ #743: AuthGssApiWithMic にデフォルトのクライアント資格情報を使用する
マージ #801: InterruptedException をキャッチした後にスレッドの割り込みステータスを復元する
マージ #793: PKCS5 クラスと PKCS8 クラスをマージ
アップグレードされた依存関係 SLF4J (1.7.36) および Logback (1.2.11)
マージ #791: KeepAlive の例を更新
マージ #775: SFTP 再開サポートを追加
アップグレードされた依存関係 BouncyCastle (1.70)
マージ #687: リモートが接続を閉じるときに接続を正しく閉じるようになりました。
マージ #741: より多くのシナリオをテストするためにテスト セットアップにテストコンテナのサポートを追加
マージ #733: クライアントが CA キーを知っている場合は、正しいキー提案を送信する
マージ #746: パスフレーズを含む Putty 秘密キー ファイルの読み取りのバグを修正
マージ #742: Config.keyAlgorithms を使用して rsa-sha2 サポートを決定する
マージ #754: SFTP プロトコル バージョンを使用して FXP 名前変更フラグを条件付きで設定する
マージ #752: KeepAlive スレッドを正しく開始および終了する
マージ #753: より適切なスレッド名を提供する
マージ #724: 先読みの長さを制限するパラメーターを追加
マージ #763: 特定の鍵タイプのすべての公開鍵アルゴリズムを試す
マージ #756: 非推奨のプロキシ接続メソッドを削除
マージ #770: ed25519
aes-128-cbc
キーのサポートを追加
マージ #773: 空の OpenSSHKeyV1KeyFile を読み取るときの NPE を修正
マージ #777: あまりにも多くの先読みパケットを要求しないでください
チャネルクローズ時に EOF を送信 (修正 #143、#496、#553、#554)
マージ #726: 完全な CRT 情報が存在する OpenSSH v1 キーを解析する
マージ #721: ホスト キーの検証には既知のホスト キー アルゴリズムを優先する
#716、#729、#730 をマージ: PuTTY v3 キー ファイルの完全サポートを追加。
#708 と #71 のマージ: PKCS#8 秘密キーのサポートを追加
マージ #703: ホスト証明書キーのサポート
アップグレードされた依存関係 BouncyCastle (1.69)、SLF4j (1.7.32)、Logback (1.2.6)、asn-one (0.6.0)
マージ #702: 証明書を使用した公開キー認証のサポート
マージ #691: 負の符号なし整数をバッファに書き込むための修正
マージ #682: [email protected] 暗号のサポート
マージ #680: SCP 転送の設定可能な保存時間
バンプの依存関係 (asn-one 0.5.0、BouncyCastle 1.68、slf4j-api 1.7.30)
マージ #660: PuTTY 形式で ED25519 および ECDSA キーをサポート
マージ #655: CVE による BouncyCastle のバンプ
マージ #653: Parameters クラスを HashMap キーとして使用できるようにする
マージ #647: 識別パーサーのログ レベルを下げる
マージ #630: [email protected]
および[email protected]
暗号のサポートを追加
マージ #636: Android の互換性の向上
マージ #627: キー漏洩の防止
重大な変更: setSignatureFactories
とgetSignatureFactories
構成から削除し、 getKeyAlgorithms
とsetKeyAlgorithms
に切り替えました。
修正 #588: ssh-rsa2-256
およびssh-rsa2-512
署名のサポートを追加
マージ #579: OpenSSHKnownHosts の NPE を修正
マージ #587: OpenSSHKeyV1KeyFile のパスワードファインダーの再試行を追加
マージ #586: KeyType を Android ストアと互換性のあるものにする
マージ #593: UserAuth.getAllowedMethods()
Collection 戻り型に変更
マージ #595: 任意の長さのキーの読み取りを許可する
マージ #591: SFTP 拡張機能のクエリを許可する
マージ #603: ステートフル SFTP クライアントを作成するメソッドを追加
マージ #605: デーモン スレッドを使用して JVM シャットダウンのブロックを回避する
マージ #606: デフォルトで常に JCERandom RNG を使用する
マージ #609: セキュリティの問題を防ぐために使用後にパスフレーズをクリアする
マージ #618: OpenSSH > 8.0 で使用できるように DirectConnection のローカルポートを修正
マージ #619: BouncyCastle を 1.66 にアップグレード
マージ #622: KEX アルゴリズムを使用して「ext-info-c」を送信する
マージ #623: nistp521
署名のトランスポート エンコーディングを修正
マージ #607: 主要なアルゴリズムに対する公開鍵の計算を修正
マージ #602: RSA 証明書キーの決定を修正
修正 #415: SFTPClient.mkdirs のパスに誤ってプレフィックス「/」が付けられていた問題を修正
ETM (Encrypt-then-Mac) MAC アルゴリズムのサポートが追加されました。
修正 #454: Buffer.putUint64 の不足している容量チェックを追加
修正 #466: ハングを防ぐためにリモート アクションのロック タイムアウトを追加しました
修正 #470: EdDSA をデフォルト (最初の) 署名ファクトリーにしました
修正 #467: openssh-key-v1 サポートの暗号モードとして AES256-CBC を追加
修正 #464: DefaultConfig での [email protected] の有効化
修正 #472: サーバーが開始したグローバル リクエストを処理する
修正 #485: openssh-key-v1 キーファイルにすべてのキータイプのサポートを追加しました。
修正 #413: PrivateKeyFileResource に UTF-8 を使用する
修正 #427: 暗号化された ed25519 openssh-key-v1 ファイルのサポート
BouncyCastle を 1.60 にアップグレードしました
[email protected] MAC のサポートを追加しました
hmac-ripemd160 のサポートを追加しました
修正 #382: WildcardHostmatcher でのエスケープを修正
OpenSSH に対して Docker を使用した統合テストスイートを追加しました
修正 #187: Buffer.putString の長さのバグを修正
修正 #405: 最初のホストキーが一致しない場合はホストの検証を続行します。
マージ #372: 「net.i2p.crypto:eddsa:0.2.0」へのアップグレード
#355 と #354 を修正: 署名バイトを正しくデコードする
修正 #365: サーバーキーの新しいスタイルの OpenSSH フィンガープリントのサポートを追加しました
修正 #356: ECDSA 公開鍵の鍵タイプ検出を修正
SSHJをJava9に対応させた
修正 #341: 再帰的コピー中のパスウォーキングを修正
マージ #338: 標準入力からパスワードを読み取るための ConsolePasswordFinder を追加
マージ #336: ecdsa-sha2-nistp384 および ecdsa-sha2-nistp521 署名のサポートを追加
修正 #331: known_hosts ファイルにワイルドカードのサポートを追加
マージ #322: 40f956b からの回帰を修正 (出力ストリームの無効な長さパラメーター)
マージ #319: [email protected]
および[email protected]
証明書キー ファイルのサポートを追加しました
Gradle を 3.4.1 にアップグレードしました
マージ #305: カスタム文字列エンコーディングのサポートを追加
修正 #312: BouncyCastle を 1.56 にアップグレード
マージ #294: ED25519 を名前ではなく定数で参照
#293、#295、#301 をマージ: OSGi パッケージを修正
より強力な KeyExchange アルゴリズムのために新しい Diffie Hellman グループ 15 ~ 18 を追加しました
DefaultConfig で PKCS5 キー ファイルを有効にしました
マージ #291: sshj.properties の読み込みと連鎖例外メッセージを修正しました
マージ #284: キープアライブ スレッドで割り込みを正しくキャッチする
修正 #292: 設定された RandomFactory を Diffie Hellman KEX に渡す
修正 #256: git リポジトリが存在しない場合に SSHJ がビルドされるようになりました
LocalPortForwarder が close() で自身のスレッドに正しく割り込むようになりました。
修正 #276: ed-25519 と新しい OpenSSH キー形式のサポートを追加
修正 #280: 生成された sshj.properties ファイルからバージョンを読み取り、ネゴシエーション中にバージョンを正しく出力する
Android互換性を修正
Gradle 3.0 へのアップグレード
マージ #271: BouncyCastle を必要とせずに known_hosts をロードする
マージ #269: 多くの要望により Java6 サポートを復活
マージ #267: 接続ごとのログ記録のサポートを追加 (修正 #264)
#262、#265、#266 をマージ: PKCS5 キー ファイルのサポートを追加
sftp FileAttributes の toString を修正しました (修正 #258)
修正 #255: net.i2p.crypto.eddsa.math
パッケージの「プライベートにマークされた」クラスに依存しなくなり、OSGI 依存関係が修正されました
SSH サーバー識別行が「rn」ではなく「n」で終わることを寛大に扱います。
SSH サーバー ID の解析が改善されました。長すぎるヘッダー行がプロトコルを壊さなくなりました。
SFTP コピーの動作に重大な変更が導入されました: 以前は、ソースとターゲットの両方が異なる名前のフォルダーである場合、SFTP コピー操作の動作が異なりました。この場合、ソースの内容をターゲット ディレクトリにコピーするのではなく、ディレクトリ自体がターゲット ディレクトリのサブディレクトリとしてコピーされました。この動作は、ソースの内容をターゲットにコピーするというデフォルトの動作を優先して削除されました。動作を SCP の仕組みに合わせます。
修正 #252 (経由: #253): 同じ名前のサブディレクトリが誤ってマージされなくなりました
修正 #239: 空の文字列をアドレスまたはキャッチオール アドレスとして使用した場合、リモート ポート転送が機能しませんでした。
修正 #242: ソース jar マニフェストに OSGI ヘッダーを追加
修正 #236: 動的ポート割り当てによるリモート ポート転送が BufferUnderflowException で失敗する
gradle ディストリビューションを 2.12 にアップグレードしました
クローズ #234: Java6 サポートの削除 (0.15.0 は Java7 への依存関係によりすでに Java6 と互換性がありませんでした)
修正 #118: クライアント ID を送信する前にサーバー ID を待機するための構成スイッチを追加しました。
修正 #114: 終了コードを検査する前にコマンドで close() を呼び出す必要がある javadoc を追加しました。
修正 #237: 認証成功の直後に[email protected]
グローバル リクエストを受信した場合の競合状態を修正しました。
修正 #220: ssh-ed25519
ホストキーのサポートを追加
修正 #225: 誤ったフィンガープリントが生成されることがある ECDSA フィンガープリント計算のバグを修正しました
RFC4253 および RFC4345 からのarcfour
ストリーム暗号を追加
RFC4344 および RFC4253 のすべてのブロック暗号を追加しました
修正 #171: [email protected]
鍵交換アルゴリズムのサポートを追加
ecdh-sha2-nistp256
、 ecdh-sha2-nistp384
、およびecdh-sha2-nistp521
鍵交換アルゴリズムのサポートを追加しました
修正 #167: diffie-hellman-group-exchange-sha1
およびdiffie-hellman-group-exchange-sha256
キー交換メソッドのサポートを追加しました
修正 #212: シェル拡張が正しく機能するようにパス エスケープを構成する
マージ #210: RemoteFileInputStream.skip が間違った値を返す (修正 #209)
マージ #208: SCP 帯域幅制限のサポートを追加
マージ #211: キーファイル形式の検出をより堅牢にしました
マージ #199: ReadAheadRemoteFileInputStream の IndexOutOfBoundsException を修正、#183 を修正
マージ #195: 新しい認証のサポート: gssapi-with-mic
マージ #201: ネゴシエートされた鍵交換アルゴリズムを検証する新しいオプション
マージ #196: 既知のホスト ファイルで完全なホスト名を検索するための修正
JDK6 または JDK7 の実行時に HTTP プロキシのサポートを追加、修正: #170
マージ #186: ストリームの終わりを検出するための修正
JDK6 にコンパイル、#179 と #185 を修正
LocalPortForwarder がチャネルを開いて開始できない場合に、ソケットとチャネルを正しく閉じるようにしました (修正 #175 および #176)
マージ #181: オフセット付き読み取り時の書き込みパケット長が無効です (修正 #180)
@hierynomus が SSHJ のメンテナを引き継いだため、新しい Maven 座標com.hierynomus:sshj:0.11.0
追加されました。
ビルド システムを Gradle 2.2.1 に移行しました
マージ #150: 一部の SSH サーバー上の不正なファイル ハンドルを修正、修正: #54、#119、#168、#169
OSGi バンドルでjzlib
オプションにしました。修正: #162
いくつかのログレベルを改善、修正: #161
マージ #156、#164、#165: hmac-sha2-256
およびhmac-sha2-512
のブロック サイズを修正
マージ #141: プロキシ サポートの追加
マージ #157、#163: ドキュメントとビルドの修正
BouncyCastle を 1.51 にアップグレード、修正: #142
接続ドロップ検出によるキープアライブの実装、#166 の修正