使用JSch SFTP 庫解決Java UnknownHostKey 問題
使用Java SFTP 庫(JSch) 時,您可能會遇到“UnknownHostKey”由於嚴格的主機密鑰檢查。引發此錯誤的原因是 JSch 無法驗證遠端伺服器提供的主機金鑰的真實性。
根本原因:
當您嘗試連接到遠端 SFTP 時發生錯誤第一次使用伺服器。 JSch 執行主機金鑰檢查,以確保您連接到正確的伺服器而不是惡意冒名頂替者。
解:
有兩種常見方法可以解決此問題:
1。跳過主機金鑰檢查:
此方法不建議,因為它會損害您的連線安全。但是,如果您確定主機金鑰是可信任的,則可以在連接到伺服器之前將「StrictHostKeyChecking」屬性設為「no」來停用主機金鑰檢查:
java.util.Properties config = new java.util.Properties(); config.put("StrictHostKeyChecking", "no"); session.setConfig(config);
2 .新增預期的主機金鑰:
為了增強安全性,建議將預期的主機金鑰新增至JSch 的主機金鑰儲存庫。這可以使用以下方法之一來實現:
產生已知主機檔案:
從*nix 伺服器執行以下命令:
ssh-keyscan example.com > known_hosts
使用「JSch.setKnownHosts(path)」指向檔案:
JSch.setKnownHosts("path/to/known_hosts");
手動新增主機>
JSch jsch = new JSch(); HostKey hostKey = jsch.getHostKeyRepository().add(hostname, publicKey, algName);
額外注意:額外注意:確保您提供的主機金鑰與遠端伺服器提供的實際金鑰相符。如果密鑰不匹配,連線仍然會因安全性異常而失敗。
以上是如何解決使用JSch的SFTP函式庫時出現「UnknownHostKey」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!