警告 | SSHJ 0.37.0 及以下版本容易受到 CVE-2023-48795 - Terrapin 的攻擊。請升級到0.38.0或更高版本。 |
首先,請看一下其中一個範例。希望您會發現該 API 使用起來很愉快:)
要獲得 SSHJ,您有兩個選擇:
將 SSHJ 的依賴項新增至您的專案。
自己建構 SSHJ。
而且,如果需要,您也可以執行 SSHJ 範例。
此處未提供 SSHJ 的二進位版本,但如果需要,可以直接從 Maven 中央儲存庫下載。
如果您使用 Maven 建置項目,則可以將下列相依性新增至pom.xml
:
< dependency >
< groupId >com.hierynomus</ groupId >
< artifactId >sshj</ artifactId >
< version >0.38.0</ version >
</ dependency >
如果您的專案是使用另一個使用 Maven 中央儲存庫的建置工具建置的,請將此依賴項轉換為您的建置工具所使用的格式。
克隆 SSHJ 儲存庫。
確保您安裝了具有無限強度 Java 加密擴充 (JCE) 的 Java6。
運行命令./gradlew clean build
。
在examples
目錄中,有一個單獨的 Maven 項目,它展示瞭如何在一些範例案例中使用該庫。如果您想運行它們,請遵循以下準則:
安裝 Maven 2.2.1 或更高版本。
克隆 SSHJ 儲存庫。
進入examples
目錄並執行命令mvn eclipse:eclipse
。
將examples
專案導入 Eclipse。
更改範例類別中的登入詳細資訊(地址、使用者名稱和密碼)並運行它們!
讀取known_hosts檔案以進行主機金鑰驗證
公鑰、密碼和鍵盤互動式身分驗證
命令、子系統和 shell 通道
本地和遠端連接埠轉發
scp + 完整的sftp版本0-3實現
包括以下演算法的實作/適配器:
aes{128,192,256}-{cbc,ctr}
、 aes{128,256}[email protected]
twofish{128,192,256}-{cbc,ctr}
blowfish-{cbc,ctr}
、 [email protected]
、 3des-{cbc,ctr}
、 3des-{cb, 1856 twofish{128,192,256}-{cbc,ctr}
、 twofish-cbc
、 serpent{128,192,256}-{cbc,ctr}
、 idea-{cbc,ctr}
、 cast128-{cbc,ctr}
、 arcfour
、 arcfour{128,256}
非官方)密碼: 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 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
2-ssh-ed25519 、 ssh-rsa2-512
2-ssh-rs
hmac-md5
、 hmac-md5-96
、 hmac-sha1
、 hmac-sha1-96
、 hmac-sha2-256
、 hmac-sha2-512
、 hmac-ripemd160
、 [email protected]
hmac-ripemd160 、 [email protected] [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
、 [email protected]
, [email protected]
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:新增 ChaCha20-Poly1305 對 OpenSSH 金鑰的支持
合併#899:新增對 AES-GCM OpenSSH 私鑰的支持
合併#901:修復 ZLib 壓縮錯誤
合併#898:改進了 OpenSSH 私鑰的格式錯誤檔案處理
將整合測試重寫為 JUnit5
合併 #851:修復金鑰交換中的競爭條件,導致間歇性 SSH_MSG_UNIMPLMENTED
合併 #861:新增 DefaultSecurityProviderConfig 並停用 BouncyCastle
合併 #881:將測試類別重寫為 JUnit Jupiter 引擎
合併 #880:刪除了 Java 7 向後移植 Socket 實用程式
合併#879:用 java.util.Base64 取代自訂 Base64
合併#852:刪除未使用的 bcrypt 密碼雜湊方法
合併 #874:Java 8 最低版本 + 依賴項升級
合併#876:更改newStatefulSFTPClient
以傳回StatefulSFTPClient
合併#860:升級到 Gradle 7.6.1
合併#838:用 X25519 金鑰協定取代 Curve25519 類
合併 #772:刪除對 lib 的依賴
合併 #835:改進了 TimeoutException 訊息
合併#815:在 FreeBSD 上支援 authPassword
合併#813:防止 isOpen 和 write 呼叫之間的CHANNEL_CLOSE
。
合併 #811:新增Transport.isKeyExchangeREquired
以防止不必要的 KEXINIT
合併 #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:使參數類別可用作 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 Store 相容
合併 #593:將UserAuth.getAllowedMethods()
變更為 Collection 傳回類型
合併#595:允許讀取任意長度的金鑰
合併#591:允許查詢 SFTP 擴展
合併#603:新增建立有狀態 SFTP 用戶端的方法
合併#605:使用守護線程來避免阻塞 JVM 關閉
合併#606:預設總是使用 JCERandom RNG
合併#609:使用後清除密碼以防止安全問題
合併 #618:修正 DirectConnection 的本機連接埠以與 OpenSSH > 8.0 一起使用
合併#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 中的轉義問題
新增了使用 Docker 針對 OpenSSH 的整合測試套件
修復了 #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 打包
新增了新的 Diffie Hellman 群組 15-18 以實現更強大的 KeyExchange 演算法
在 DefaultConfig 中啟用 PKCS5 金鑰文件
合併#291:修復了 sshj.properties 載入和連結異常訊息
合併#284:正確捕獲 keepalive 線程中的中斷
修復 #292:將配置的 RandomFactory 傳遞給 Diffie Hellman KEX
修復了 #256:如果不存在 git 存儲庫,SSHJ 現在會構建
LocalPortForwarder 現在可以在 close() 上正確中斷其自己的線程
修復 #276:新增對 ed-25519 和新 OpenSSH 金鑰格式的支持
修正了 #280:從生成的 sshj.properties 檔案讀取版本,以便在協商期間正確輸出版本
修復了 Android 相容性問題
升級到Gradle 3.0
合併#271:載入known_hosts而不需要BouncyCastle
合併#269:根據大眾需求恢復了 Java6 支持
合併#267:新增了對每個連線日誌記錄的支援(修復#264)
合併#262、#265 和#266:新增了 PKCS5 金鑰檔案支持
修復了 sftp FileAttributes 的 toString(修復 #258)
修復 #255:不再依賴net.i2p.crypto.eddsa.math
套件中的「私有標記」類,修復了 OSGI 依賴關係
寬鬆地對待以“n”而不是“rn”結尾的 SSH 伺服器標識行。
改進了 SSH 伺服器標識的解析。太長的標題行現在不再破壞協議。
在 SFTP 複製行為中引入了重大變更:先前,如果來源和目標都是具有不同名稱的資料夾,則 SFTP 複製操作的行為會有所不同。在這種情況下,目錄本身被複製為目標目錄的子目錄,而不是將來源的內容複製到目標目錄中。此行為已被刪除,取而代之的是預設行為,即將來源的內容複製到目標中。使行為符合 SCP 的工作方式。
修復#252(來自:#253):同名子目錄不再被意外合併
修正了 #239:如果您使用空字串作為位址或包羅萬象的位址,則遠端連接埠轉送不起作用。
修正了 #242:將 OSGI 標頭新增至來源 jar 清單中
已修復 #236:使用動態連接埠指派的遠端連接埠轉送失敗並出現 BufferUnderflowException
將 gradle 發行版升級到 2.12
已關閉 #234:放棄了 Java6 支援(由於 Java7 依賴性,0.15.0 已經與 Java6 不相容)
修復 #118:新增了用於在發送客戶端標識之前等待伺服器標識的配置開關。
修復了 #114:新增了 javadoc,在檢查退出程式碼之前,您始終需要在命令上呼叫 close()。
已修正 #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:配置路徑轉義以使 shell 擴充功能能夠正常運作
合併#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)
新的 Maven 座標com.hierynomus:sshj:0.11.0
@hierynomus 接任 SSHJ 的維護者
將建置系統移轉到 Gradle 2.2.1
合併#150:修正了某些 SSH 伺服器上不正確的檔案句柄,修復:#54、#119、#168、#169
使jzlib
在 OSGi 捆綁中成為可選,修復:#162
改進了一些日誌級別,修復:#161
合併#156、#164、#165:修復了hmac-sha2-256
和hmac-sha2-512
的區塊大小
合併#141:新增代理支持
合併#157、#163:文件與建置修復
將 BouncyCastle 升級到 1.51,修復:#142
透過連線遺失偵測實現保持活動狀態,修復#166