前言
由於最近頻繁需要登錄幾個服務器,每次登錄都需要輸入密碼,故相對麻煩。
由於個人服務器用於實驗,故對安全性要求不是很高,故想實現ssh免密登錄。
通過閱讀ssh 公鑰私鑰認證操作及原理以及ssh公鑰登陸。成功實現了自己的需求。
下面來說下講解公鑰密鑰的工作原理以及ssh免密登錄的實現步驟。
公鑰密鑰原理概述
在課程計算機基礎中,我記得是學過公鑰密鑰的,公鑰和密鑰是同時生成的。
公鑰用於加密,私鑰用於解密。
公鑰是很多人可以持有,而密鑰只能自己持有。
在ssh中,只需公鑰放在服務器A上,那么你就可以通過私鑰登錄服務器A。
當你連接已放置你公鑰服務器A時,服務器A和客戶端之間大概存在以下認證流程。
(以下認證流程來自博客:ssh 公鑰私鑰認證操作及原理)
為了說明方便,以下將使用這些符號。
Ac | 客戶端公鑰 |
Bc | 客戶端密鑰 |
As | 服務器公鑰 |
Bs | 服務器密鑰 |
認證過程分為兩個步驟。在認證之前,客戶端需要通過某種方法將公鑰 Ac 登錄到服務器上。
- 會話密鑰(session key)生成
- 客戶端請求連接服務器,服務器將 As 發送給客戶端。
- 服務器生成會話ID(session id),設為 p,發送給客戶端。
- 客戶端生成會話密鑰(session key),設為 q,並計算 r = p xor q。
- 客戶端將 r 用 As 進行加密,結果發送給服務器。
- 服務器用 Bs 進行解密,獲得 r。
- 服務器進行 r xor p 的運算,獲得 q。
- 至此服務器和客戶端都知道了會話密鑰q,以后的傳輸都將被 q 加密。
- 認證
- 服務器生成隨機數 x,並用 Ac 加密后生成結果 S(x),發送給客戶端
- 客戶端使用 Bc 解密 S(x) 得到 x
- 客戶端計算 q + x 的 md5 值 n(q+x),q為上一步得到的會話密鑰
- 服務器計算 q + x 的 md5 值 m(q+x)
- 客戶端將 n(q+x) 發送給服務器
- 服務器比較 m(q+x) 和 n(q+x),兩者相同則認證成功
ssh免密登錄實驗步驟
(實驗環境:Ubuntu 17)
1. 若還沒安裝ssh服務的同學,請先安裝。
sudo apt-get install ssh
本文博客地址:http://www.cnblogs.com/toulanboy/
2. 進入家目錄下的.ssh文件夾
(若沒有該目錄,請創建。)
cd ~/.ssh
3. 生成密鑰對
(中途會讓你輸入密鑰對的密碼,由於我們想免密,故按回車跳過即可。)
(假如設置了,后面通過私鑰連接服務器時,則需要輸入密鑰對的密碼。)
ssh-keygen -t rsa
4. 將客戶端.ssh目錄下的id_rsa.pub復制到服務器A的家目錄下
(下面指令的115.115.115.115是服務器IP,lgq是你想登錄服務器的用戶名)
scp id_rsa.pub lgq@115.115.115.115:~/
5. 在服務器A上,將客戶端的id_rsa.pub追加到服務器的ssh的認證列表中
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
6. 客戶端后面直接可以通過私鑰免密登錄了。
ssh lgq@115.115.115.115
至此完畢。希望對你有幫助。
參考:ssh 公鑰私鑰認證操作及原理以及ssh公鑰登陸。