使用ssh-agent

 

ssh-agent是一种控制用来保存公钥身份验证所使用的私钥的程序。ssh-agent在X会话或登录会话之初启动,所有其他窗口或程序则以客户端程序的身份启动并加入到ssh-agent程序中。通过使用环境变量,可定位代理并在登录到其他使用ssh机器上时使用代理自动进行身份验证。 


其实ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程。通过使用ssh-agent就可以很方便的在不的主机间进行漫游了

 

生成无密码的密匙

#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0a:a2:42:2e:86:08:fa:ab:57:2f:70:21:db:98:ff:73 root@ssdb2
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|  . .            |
|...*..  S        |
|B.=.+. .         |
|Bo = ..          |
|+.. o o E        |
|.oo. o.o         |
+-----------------+
一路回车生成无密码的登录key

 

启用ssh-agent:

 

#eval `ssh-agent`
Agent pid 1489


 

设置守护进程脚本:

 

#cat /root/.ssh/environment 
SSH_AUTH_SOCK=/tmp/ssh-TwInyl1488/agent.1488; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1489; export SSH_AGENT_PID;
#echo Agent pid 1489;


我们可以检查代理是否正在运行:

ps -ef | grep ssh-agent
root      1489     1  0 23:39 ?        00:00:00 ssh-agent


到这里基本上已经大功告成了,还有一个小问题那就是总不能每次重启都手动运行ssh-agent吧!最省时的方法就是将它写到profile中去:

 

为了不把profile搞乱,我在在/etc/profile.d下建一个ssh-agent.sh文件:

 

[root@supersun.biz ~]#cat /etc/profile.d/ssh-agent.sh 
#!/bin/bash
SSH_ENV=/root/.ssh/environment

function start_agent {
    echo "Initialising new SSH agent..."
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    ssh-add /data/manager/ssh_keys/manager
}

if [ -f "${SSH_ENV}" ]; then
    . ${SSH_ENV} > /dev/null
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
    start_agent;
}
else
    start_agent;
fi



把专有密钥添加到 ssh-agent 中

ssh-add ~./ssh/id_dsa



查看 ssh-agent 中的密钥

#ssh-add -l





参考文档:

https://www.aliyun.com/jiaocheng/1384300.html

http://blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add/

https://blog.csdn.net/cityzenoldwang/article/details/77097661