關於SSH公鑰驗證中錯誤認知的糾正

2021-07-29 13:53:45 字數 1625 閱讀 1912

首先有乙個前提是:遠端伺服器上已經留存了本地使用者的公鑰

本地使用者的公鑰,一般的會留存在伺服器的該使用者家目錄下的.ssh/authorized_keysw下檔案中,至於怎麼留存到伺服器上,你可以通過ssh-keygen生成金鑰對之後手動拷貝過去等等,這都不是重點,我們關心的只是驗證的互動過程。

往往第一次登陸遠端伺服器時,會提示是否接受遠端服務的公鑰,選擇是的話,會在本地主機上留存乙份遠端伺服器的公鑰,再登陸時,就不會提示了。

接下來就是重點:

使用者使用ssh客戶端發起ssh公鑰登陸請求時,會帶著使用者名稱(username)和之前生成的公鑰(public key)一起,傳送到伺服器端。

伺服器端的ssh守護程序,就會根據傳送過來的使用者名稱,在該使用者的家目錄的.ssh/authorized_keys檔案中查詢使用者提交過來的公鑰,如果查詢到了,就會向ssh客戶端傳送乙個「挑戰」——所謂「挑戰」(英文中叫 challenge),我們應該理解為乙個名詞,就是使用剛才使用者的公鑰去加密乙個隨機生成的大字串,產生出另外乙個字串,這個新生成的字串,就叫「挑戰」。同時,「挑戰」只會被另一半金鑰正確解密,對於其他的金鑰來說,這個字串就是一堆看不懂的二進位制(a pile of bits)。

本地ssh客戶端,在接收到伺服器發來的「挑戰」之後,就會使用使用者自己的私鑰(private key)去解密,此時,ssh客戶端應該提示使用者輸入金鑰對生成時設定的口令(當然一般情況下,使用者在生成金鑰對時,ssh-keygen這個玩意兒會提示我們輸入乙個口令,我們一般都是置空的。所以這個時候,不會有提示),輸入正確後,得到解密之後的字串

解密過程結束後,ssh客戶端接著就把解密後的字串(key response)連同乙個session id使用md5演算法生成乙個key repsonse,再發回給等待中的遠端sshd守護程序。

key respone的生成圖示(紅框內):

遠端伺服器端的sshd守護進接收到ssh客戶端傳送過來的字串,它會先自己使用同樣的md5雜湊演算法對之前的隨機字串和session id進行加密,完了和客戶端發過來的進行比對驗證。如果正確,則驗證通過,允許客戶端接下來的訪問,如果不正確,則繼續使用authorized keys列表中的下乙個key進行驗證直到找到乙個正確的為止,若果最後還是未找到,則拒絕客戶端的訪問。

很多人關於到底是公鑰加密私鑰解密,還是私鑰加密公鑰解密這個問題表示疑惑,答案是都有,上邊這個過程就很生動的講述了到底是怎麼使用的。

參考文章:

SSH公鑰 public key 驗證

scp是linux下的遠端拷貝 命令 1 將本地檔案拷貝到遠端 scp 檔名 使用者名稱 計算機ip或者計算機名稱 遠端路徑 2 從遠端將檔案拷回本地 scp 使用者名稱 計算機ip或者計算機名稱 檔名本地路徑 3 將本地目錄拷貝到遠端 scp r目錄名 使用者名稱 計算機ip或者計算機名稱 遠端路...

SSH公鑰秘鑰

可是碼雲不認識你是誰,這個時候就提示你輸入賬號密碼來確認是誰誰誰提交了這次 往後的日子裡每次修改提交 都需要輸入賬號密碼來確認身份,這是個很煩的事情,所以出現了 ssh 公鑰 這種形式來解決這個問題。使用 git,第一件事就是通過使用者名稱密碼生成公鑰和私鑰,這是一一對應的關係,就像一把鑰匙開一把鎖...

檢視本機ssh公鑰,生成公鑰

檢視ssh公鑰方法 1.通過命令視窗 a.開啟你的git bash 視窗 b.進入.ssh目錄 cd ssh c.找到id rsa.pub檔案 lsd.檢視公鑰 cat id rsa.pub或者vim id rsa.pub如圖 2.或者你也可以直接輸入命令 cat ssh id rsa.pub 如圖...