天天看點

你知道SSH密鑰認證是如何工作的嗎

作者:阿銘linux

阿銘linux近16年的IT從業經驗,6年+鵝廠運維經驗,6年+創業公司經驗,熟悉大廠運維體系,有從零搭建運維體系的實戰經驗。關注我,學習主流運維技能,讓你比别人提升更快,漲薪更多!

遠端登入Linux除了可以使用使用者名密碼認證外,我們還可以通過密鑰對認證。也許你對如何配置密鑰認證非常熟悉,但你是否了解這個密鑰對如何工作呢?

先來看一幅圖

你知道SSH密鑰認證是如何工作的嗎

對于準備階段,大家并不陌生,就是将用戶端上的預先生成的公鑰放到服務端上去。

關于這個密鑰對,我啰嗦兩句。其中公鑰用來加密,私鑰用來解密,隻有和公鑰配對的私鑰才能解開其公鑰加密的字元串。它們屬于非對稱加密。

說到加密,我不得不提一下,加密的方式主要有兩種:

  • 對稱加密(也稱為秘鑰加密)
  • 非對稱加密(也稱公鑰加密)

所謂對稱加密,指加密解密使用同一套密鑰。如下圖所示:

Client:

你知道SSH密鑰認證是如何工作的嗎

Server:

你知道SSH密鑰認證是如何工作的嗎

對稱加密的加密強度高,很難破解。但是在實際應用過程中不得不面臨一個棘手的問題:如何安全地儲存密鑰呢?尤其是考慮到數量龐大的Client端,很難保證密鑰不被洩露。一旦一個Client端的密鑰被竊取,那麼整個系統的安全性也就不複存在。為了解決這個問題,非對稱加密應運而生。非對稱加密有兩個密鑰:公鑰和私鑰。

再來看看公鑰、私鑰的協商互動過程:

① 如果SSH服務端開啟了密鑰認證,那麼當用戶端向目标伺服器發送登入請求時,服務端會優先通過密鑰驗證方式進行登入驗證。

② SSH服務端會讀取~/.ss/authorized_keys裡所有的公鑰資訊,這裡需要注意,公鑰存取的檔案路徑是可以在SSH服務配置檔案裡進行配置的。

③ SSH服務端會生成一串随機數,然後使用相應的公鑰對其加密。

④ SSH服務端将加密後的密文發給用戶端。

⑤ 用戶端使用私鑰解密,私鑰存儲路徑通常為~/.ssh/id_rsa,當然也可以使用-i選項指定,或者在SSH用戶端軟體(如Xshell或者Mobaxterm)裡配置。

你知道SSH密鑰認證是如何工作的嗎

⑥ 用戶端如果解密成功,則會把解密後的随機字元發送給服務端。如果解密失敗,則會繼續嘗試密碼驗證等其它方式進行登入校驗。

⑦ 服務端對用戶端傳回的随機字元串進行比對。

⑧ 如果比對成功,則認證成功,用戶端順利登入。否則,會回報登入失敗。