1. 程式人生 > >ssh-agent代理的簡單用法

ssh-agent代理的簡單用法

前言

在ansible的官方文件中,提到了強烈推薦用ssh-agent來管理金鑰

究竟ssh-agent是什麼,它有什麼用法呢,下面來一探究竟。

ssh-agent是什麼?用處是什麼?

ssh-agent是什麼?
ssh-agent是一個代理程式,它能幫助我們管理我們的私鑰。


ssh-agent在哪裡用得到?

  1. 當我們的主機有多個金鑰對(例如:root使用者生成了一對公鑰私鑰對,hmk使用者生成了另外一對公鑰私鑰對),我們連線到其他不同的多臺主機時,可能用的認證使用者不一樣,這時候需要我們手動指定使用哪個金鑰,一旦機器過多輸入會非常繁瑣,ssh-agent能幫我們管理這些金鑰對
  2. 當我們給私鑰加了密碼,而我們的認證方式又選擇了金鑰認證,ssh-agent可以幫助我們免去輸入密碼的繁瑣操作

ssh-agent的啟動

啟動ssh-agent有兩種命令:

 ssh-agent $SHELL
 eval `ssh-agent`

第一條命令:ssh-agent $SHELL
它會在當前的shell(筆者的shell為bash)中啟動一個子shell,ssh-agent程式執行在這個子shell中,在centos中,$SEHLL就是bash,所以這個命令可以寫為ssh-agent bash,我們可以用pstree命令來檢視程序樹驗證(找不到pstree命令可以用yum -y install psmisc安裝)。
執行命令前:

執行命令後:

在當前會話中,我們已經進入到了子shell裡了,ssh-agent也執行在這裡,我們可以退出當前的子shell,ssh-agent會隨之消失。

第二條命令:

 eval `ssh-agent`

它會直接開啟一個ssh-agent程序:

因為它是獨立程序,所以即使我們退出當前shell連線,它依然存在,所以,我們最好在退出前用命令ssh-agent k關閉它。當然,這種方式同樣適用於第一種開啟了的ssh-agent程式。如果我們意外斷開了連線,再連線的時候用ssh-agent k是無法關閉它的:

這個時候很簡單,用ps -ef|grep ssh-agent找到對應的agent程式,用kill pid號來殺死程序即可。

ssh-agent新增金鑰

使用前面的步驟開啟了ssh-agent後,可以用ssh-add /root/.ssh/id_rsa

命令新增金鑰了,注意:如果沒有開啟ssh-agent,你會看到這個報錯

此時需要用第一步的方法開啟ssh-agent

ssh-agent管理多個私鑰

首先,我們需要生成多對金鑰,方法可以參考我前面的部落格[https://www.cnblogs.com/huangmengke/p/11497740.html],首先,生成一個非預設名字的私鑰:

然後用這個來做免密登入到其他機器的認證:

然後,我們來“免密”登入試試:

WTF???不是免密了嗎?這是因為ssh的金鑰認證預設使用~/.ssh/id_rsa進行認證,如果你使用非預設的金鑰認證,需要手動指定你的私鑰檔案,因為你發給172.16.101.251的公鑰和251問你的~/.ssh/id_rsa不匹配,所以需要問你輸入密碼,正確的認證方式通過-i指定私鑰檔案:

以上只是以一個私鑰舉例子,當我們需要連線N臺主機,而且使用不同的金鑰來認證,每次需要手動指定私鑰,會極其繁瑣,這時ssh-agent就可以幫忙了~

ssh-agent避免輸入私鑰密碼

首先,設定ssh的私鑰/root/.ssh/id_rsa_hmk1 和私鑰密碼123456:

同樣的步驟做金鑰驗證,最後會提示我們輸入金鑰的密碼:

這樣的話,每次我們用金鑰認證登入,都要求我們輸入密碼,非常的麻煩,ssh-agent可以幫助我們管理金鑰。在一個ssh會話中,只要輸入一次私鑰密碼,在同一ssh會話中之後再次使用到相同的私鑰時,可以不用再次輸入對應密碼,示例如下:

ssh-agent管理金鑰的其它命令

檢視ssh-agent已經新增的私鑰:

 ssh-add -l

示例:

檢視ssh-agent已經新增的私鑰對應的公鑰:

  ssh-add -L

示例:

刪除指定的私鑰

  ssh-add -d 私鑰檔案

示例:

刪除所有私鑰

  ssh-add -D

類比總結

host1:二叔所在的公司
私鑰:我的私人財產-電腦
私鑰密碼:開機密碼
公鑰:我的個人名片
host2:胖虎公司(胖虎是筆者的朋友)
認證檔案:收到二叔的名片,去geo找他,通過私鑰驗證身份

我copy公鑰--->全世界撒名片,這個我自己來,不讓管家胖虎幹,畢竟刷臉
新增代理agent--->管家胖虎代為管理我的私人財產-電腦,和進入電腦的開機密碼;我有N臺電腦和密碼,只給胖虎管一臺或幾臺,不滿意他的表現可以隨時不讓管家管理,不過這樣接洽外部會變得非常麻煩。

所以,ssh-agent,你學會了嗎