以下 Java SFTP 錯誤是什麼意思?

以下 Java SFTP 錯誤是什麼意思?

我是安全領域的新手,想了解我遇到的這個錯誤:

com.jcraft.jsch.JSchException:未知主機金鑰:127.0.0.1。 RSA 金鑰指紋是 com.jcraft.jsch.Session.checkHost(Session.java: 797) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342) 在com.jcraft.jsch.Session.connect(Session.java:342)com.jcraft.jsch.Session.connect(Session.java:342)com.jcraft.jsch.Session. .java:183) 在FileTransfer.main(FileTransfer.java:37) 程序退出退出程式碼 0。

「unknownHostKey:127.0.0.1」是什麼意思? RSA金鑰

指紋是 a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc`

我需要設定一個名為 known_hostsfile 的文件,以修復此錯誤:

我嘗試像這樣設定它:

127.0.0.1 

但這是行不通的。我是否誤解了文件的含義 known_hosts

答案1

這個答案的功勞在於吉爾斯來自StackExchange 安全站點,作為他/她的郵政解釋known_hostsauthorized_keys檔案是理解 SSH/SFTP 元件的一個很好的起點。

見下文:


known_hosts檔案允許客戶端對伺服器進行身份驗證,以檢查它是否未連接到模仿者。該authorized_keys文件允許伺服器對使用者進行身份驗證。

伺服器認證

建立 SSH 連線時發生的第一件事就是伺服器將其公鑰發送給客戶端,並證明(感謝公鑰密碼學)向客戶端表明它知道關聯的私鑰。這對伺服器進行身份驗證:如果協定的這一部分成功,則客戶端知道伺服器就是它所聲稱的伺服器。

客戶端可以檢查該伺服器是否為已知的伺服器,而不是某個試圖冒充正確伺服器的惡意伺服器。 SSH 只提供了一種簡單的機制來驗證伺服器的合法性:它會在客戶端電腦上的檔案中記住您已經連接到的伺服器~/.ssh/known_hosts(還有一個系統範圍的檔案/etc/ssh/known_hosts)。第一次連接到伺服器時,您需要透過其他方式檢查伺服器提供的公鑰是否確實是您要連接的伺服器的公鑰。如果您擁有要連接的伺服器的公鑰,則可以將其~/.ssh/known_hosts手動新增至用戶端。

順便說一句,known_hosts可以包含 SSH 實作支援的任何類型的公鑰,而不僅僅是 DSA(還有 RSA 和 ECDSA)。

在向伺服器發送任何機密資料之前,必須先對伺服器進行身份驗證。特別是,如果用戶認證涉及密碼,則不得將密碼發送到未經認證的伺服器。

使用者認證

只有當遠端使用者能夠證明他們有權存取該帳戶時,伺服器才會允許該使用者登入。根據伺服器的配置和使用者的選擇,使用者可以提供多種形式的憑證之一(下面的清單並不詳盡)。

  • 使用者可以提供他嘗試登入的帳戶的密碼;然後伺服器驗證密碼是否正確。
  • 用戶可以提供公鑰並證明他擁有與該公鑰相關聯的私鑰。這與用於驗證伺服器的方法完全相同,但現在用戶正在嘗試證明其身份,而伺服器正在驗證它。如果使用者證明他知道私鑰並且公鑰位於帳戶的授權清單(~/.ssh/authorized_keys在伺服器上)中,則接受登入嘗試。
  • 另一種方法涉及將驗證使用者身分的部分工作委託給客戶端電腦。這種情況發生在企業等受控環境中,此時許多電腦共用相同的帳戶。伺服器透過與相反方式使用的相同機制對客戶端電腦進行身份驗證,然後依賴用戶端對使用者進行身份驗證。

相關內容