使用ssh-agent
ssh-agent是一種控制用來保存公鑰身份驗證所使用的私鑰的程序。ssh-agent在X會話或登錄會話之初啟動,所有其他窗口或程序則以客戶端程序的身份啟動並加入到ssh-agent程序中。通過使用環境變量,可定位代理並在登錄到其他使用ssh機器上時使用代理自動進行身份驗證。
www.2cto.com
其實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上了。
[
[email protected] ~]#ssh host1
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
[root@host3 root]#
到這裡基本上已經大功告成了,還有一個小問題那就是總不能每次都手動運行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..."
eval `ssh-agent |tee ~/.agent.env`
ssh-add
fi
這樣就不會生成太多的ssh-agent程序了,而且支持GUI環境。當我打開一個終端的話:
Stale agent file found. Spawning new agent...
Agent pid 2543
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
[
[email protected] ~]#
添加了新的密鑰。