ssh公鑰認證原理及設置root外的其他用戶登錄ssh


1)創建其他用戶

useradd [-d 登錄目錄] [-G ssh][用戶名] 
一定要將用戶添加到ssh組不然無法沒有權限登錄ssh

2)設置ssh不允許root登錄

vi /etc/ssh/sshd_config
找到 PermitRootLogin yes
修改為PermitRootLogin no
並在尾部添加 AllowUsers  [用戶名列表]
然后重啟ssh服務,/etc/init.d/ssh restart

3)如何使用公鑰認證

先解釋下什么是公鑰密鑰:

公鑰私鑰是不對稱加密方式,公私鑰的本質都是密鑰,公鑰是可以公開的代表用戶信息的一個數字證書,私鑰是用戶公鑰對應的一個的密鑰。公鑰可以公開,密鑰一定要自己保存好不要泄露。兩個密鑰是互解的關系,即用公鑰加密的內容只能用私鑰解密,用私鑰加密的內容只能用公鑰解密。
公鑰可以讓任何人知道,因為它是代表用戶信息的一個簽章。
比如A公開了它的公鑰,其向B發送了一個信息,這個信息用A的私鑰加密的,B用A的公鑰解密出這個信息,就說明信息是來自A的。
又比如A想發送一個只有B能解密出的信息,則A用B的公鑰加密信息,然后發送給B,則只有B能解密出信息,因為只有B有它的公鑰對應的密鑰。
 

ssh 的公鑰認證就是使用了公私鑰互解的特性。服務器和客戶端都各自擁有自己的公鑰和密鑰。為了說明方便,以下將使用這些符號。

Ac 客戶端公鑰 Bc 客戶端密鑰 As 服務器公鑰 Bs 服務器密鑰

在認證之前,客戶端需要通過某種方法將公鑰 Ac 登錄到服務器上。

認證過程分為兩個步驟。

  1. 會話密鑰(session key)生成
    1. 客戶端請求連接服務器,服務器將 As 發送給客戶端。
    2. 服務器生成會話ID(session id),設為 p,發送給客戶端。
    3. 客戶端生成會話密鑰(session key),設為 q,並計算 r = p xor q。
    4. 客戶端將 r 用 As 進行加密,結果發送給服務器。
    5. 服務器用 Bs 進行解密,獲得 r。
    6. 服務器進行 r xor p 的運算,獲得 q。
    7. 至此服務器和客戶端都知道了會話密鑰q,以后的傳輸都將被 q 加密。
  2. 認證
    1. 服務器生成隨機數 x,並用 Ac 加密后生成結果 S(x),發送給客戶端
    2. 客戶端使用 Bc 解密 S(x) 得到 x
    3. 客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話密鑰
    4. 服務器計算 q + x 的 md5 值 m(q+x)
    5. 客戶端將 n(q+x) 發送給服務器
    6. 服務器比較 m(q+x) 和 n(q+x),兩者相同則認證成功

根據wiki的解釋:

實際上,在客戶端請求連接服務端的時候,客戶端將Ac告訴了服務端,並且服務端會在請求登錄用戶目錄下的./ssh/authorized_keys  查找是否有這個Ac,如果沒有,則認為是非法的連接,后續的認證就沒有了。

ssh公鑰認證的使用:
客戶端產生公密鑰對,將客戶端的公鑰添加進服務端用戶的ssh認證中。具體操作:
首先  ssh-keygen 命令產生公私鑰對(客戶端linux),或者使用window的ssh客戶端如secureCRT,putty等生成
然后 將第一步生成的公鑰id_rsa.pub 上傳到 服務端,接着 cat id_rsa.pub >> 用戶目錄/.ssh/ authorized_keys  將公鑰添加進認證中
第一步生成的密鑰放在本地用於跟遠程主機的認證
 
 

參考閱讀:

1.數字簽名是什么?

2.SSH原理與運用(一):遠程登錄

3. ssh登錄過程詳細介紹

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM