由於最近頻繁需要登入幾個伺服器,每次登入都需要輸入密碼,故相對麻煩。
由於個人伺服器用於實驗,故對安全性要求不是很高,故想實現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),兩者相同則認證成功
(實驗環境:ubuntu 17)
sudo apt-get install ssh
(若沒有該目錄,請建立。)
cd ~/.ssh
(中途會讓你輸入金鑰對的密碼,由於我們想免密,故按回車跳過即可。)
(假如設定了,後面通過私鑰連線伺服器時,則需要輸入金鑰對的密碼。)
ssh-keygen -t rsa
(下面指令的115.115.115.115是伺服器ip,lgq是你想登入伺服器的使用者名稱)
scp id_rsa.pub [email protected]:~/
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
ssh [email protected]
至此完畢。希望對你有幫助。
參考:ssh 公鑰私鑰認證操作及原理以及ssh公鑰登陸。
使用ssh公鑰實現免密碼登入
ssh無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。首先以root賬戶登陸為例。1.在a機下生成公鑰 私鑰對。root a ssh ...
使用ssh公鑰實現免密碼登入
ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以centos為例。有機器a 192.168.1.155 b 192.168.1.181 現想a通過ssh免密碼登入到b。首先以root賬戶登陸為例。1.在a機下生成公鑰 私鑰對。root a ssh...
用ssh公鑰實現免密碼登入
ssh 無密碼登入要使用公鑰與私鑰。linux下可以用用ssh keygen生成公鑰 私鑰對,下面我以ubuntu為例。有機器a 10.0.2.1 b 10.0.2.100 現想a通過ssh免密碼登入到b。首先以kube賬戶登陸為例。ssh keygen t rsa p p表示密碼,p 就表示空密碼...