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,你學會了嗎?


免責聲明!

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



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