Gih's Blog

只言片语

我认为最好最简单的使用ssh-agent的方法

2011-06-12 by gihnius, tagged as linux, unix

以前一直为在哪启动ssh-agent发愁,在网上搜索到也有很多人有类似的问题. 把eval `ssh-agent`放到 .xsession, .xinitrc, .profile 都不是好办法!因为这样很容易启动多个ssh-agent.

有个开源工具叫 keychian,是一组shell脚本.不过我觉得它还是把问题复杂化了.要是有Apple OSX系统的keychain那样还差不多. 因此我还是自己折腾出下面这种方法,我使用的是zsh,下面的配置应该在bash下也能够使用..zshrc

## 启动ssh-agent,并保存agent环境到 $HOME/.ssh/ssh-agent.sh里.
alias start-ssh-agent='[[ ! -f ~/.ssh/ssh-agent.sh ]] && eval `ssh-agent | tee ~/.ssh/ssh-agent.sh` && ssh-add'
## 停用ssh-agent.
alias stop-ssh-agent='eval `ssh-agent -k`; rm -f ~/.ssh/ssh-agent.sh'
## 每个login shell都使用已有的 ssh-agent,重新读取已经启动的ssh-agent信息到当前环境中.
if [[ -f ~/.ssh/ssh-agent.sh ]] ; then
    eval `< ~/.ssh/ssh-agent.sh` >/dev/null
    ps $SSH_AGENT_PID | grep -q ssh-agent
    if [ $? != 0 ] ; then
        rm -f ~/.ssh/ssh-agent.sh
    fi
fi 
通常,我是先打开一个终端,然后执行start-ssh-agent, 其实你喜欢什么时候需要就执行还是很方便的. 然后启动screen 或 tmux. 如果想停用,就跑stop-ssh-agent, 每次开一个新的终端,都会读取ssh-agent.sh的设置,继承已有的ssh-agent环境. 因此在一次启动之后, 新的终端也能使用.