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)如何使用公鑰認證

先解釋下什麼是公鑰密鑰:html

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

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

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

在認證以前,客戶端須要經過某種方法將公鑰 Ac 登陸到服務器上。git

認證過程分爲兩個步驟。服務器

  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的解釋:session

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

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

參考閱讀:

1.數字簽名是什麼?加密

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

3. ssh登陸過程詳細介紹.net

相關文章
相關標籤/搜索