sh-agent是一種控制用來儲存公鑰身份驗證所使用的私鑰的程式。ssh-agent在X會話或登入會話之初啟動,所有其他視窗或程式則以用戶端程式的身份啟動并加入到ssh-agent程式中。通過使用環境變量,可定位代理并在登入到其他使用ssh機器上時使用代理自動進行身份驗證。
其實ssh-agent就是一個密鑰管理器,運作ssh-agent以後,使用ssh-add将私鑰交給ssh-agent保管,其他程式需要身份驗證的時候可以将驗證申請交給ssh-agent來完成整個認證過程。通過使用ssh-agent就可以很友善的在不的主機間進行漫遊了,假如我們手頭有三台server:host1、host2、host3且每台server上到儲存了本機(supersun.biz)的公鑰,是以我可以通過公鑰認證登入到每台主機:
[[email protected] ~]#ssh host1
Last login: Thu Oct 18 13:56:08 2007 from supersun
[root@host1 root]#
[[email protected] ~]#ssh host2
Last login: Fri Oct 12 11:14:44 2007 from supersun
[root@host2 root]#
[[email protected] ~]#ssh host3
Last login: Sat Sep 29 10:21:32 2007 from supersun
[root@host3 root]#
但是這三台server之間并沒有并沒有儲存彼此的公鑰,而且我也不可能将自己的私鑰存放到server上(不安全),是以彼此之間沒有公鑰進 行認證(可以密碼認證,但是這樣慢,經常輸密碼,煩且密碼太多容易忘)。但是如果我們啟用ssh-agent,問題就可以迎刃而解了。
啟用ssh-agent:
[[email protected] ~]#eval `ssh-agent `
Agent pid 3526
添加私鑰:
[[email protected] ~]#ssh-add
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
編緝/etc/ssh/ssh_config檔案:ForwardAgent yes
讓ssh-agent能轉發,這樣就可以這樣登陸了:supersun.biz---->host1---->host2,到此請注意,如果host1上沒有設定轉發的話就登不了host3了,設定了轉發後可以進一步跳到rs3上了。
Last login: Thu Oct 18 16:21:29 2007 from supersun
[root@host1 root]# vi /etc/ssh/ssh_config
[root@host1 root]# ssh host2
Last login: Thu Oct 18 16:20:28 2007 from supersun
[root@host2 root]# ssh host3
Last login: Thu Oct 18 16:10:39 2007 from supersun
到這裡基本上已經大功告成了,還有一個小問題那就是總不能每次都手動運作ssh-agent吧!最省時的方法就是将它寫到profile中去:
為了不把profile搞亂,我在在/etc/profile.d下建一個ssh-agent.sh檔案:
[[email protected] ~]#cat /etc/profile.d/ssh-agent.sh
#!/bin/sh
if [ -f ~/.agent.env ]; then
. ~/.agent.env >/dev/null
if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then
echo "Stale agent file found. Spawning new agent..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi
else
echo "Starting ssh-agent..."
這樣就不會生成太多的ssh-agent程式了,而且支援GUI環境。當我打開一個終端的話:
Stale agent file found. Spawning new agent...
Agent pid 2543
[[email protected] ~]#
添加了新的密鑰。