2008-09-19 63 views
6

我在Linux上使用带密码保护密钥的ssh-agent。每次我登录到某台机器,我这样做:带密码的ssh-agent不会产生太多进程

eval `ssh-agent` && ssh-add 

此作品不够好,但我每次登录,这样做的时候,我创建另一个的ssh-agent。偶尔,我会做一个killall ssh-agent收获它们。是否有一种简单的方法可以在不同的会话中重复使用相同的ssh-agent进程?

+0

另请参阅这个优秀的答案:http://unix.stackexchange.com/a/90869/92102 – 2014-11-19 14:42:22

回答

5

看看钥匙扣。它写的是与你自己类似的情况。 Keychain

3

你对这台机器有多少控制?一个答案是将ssh-agent作为守护进程运行。其他选项在this web page上进行了解释,基本上测试以查看代理是否在附近,如果不是,则运行它。

重现这里的一个想法:

SSH_ENV="$HOME/.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 
    /usr/bin/ssh-add; 
} 

# Source SSH settings, if applicable 

if [ -f "${SSH_ENV}" ]; then 
    . "${SSH_ENV}" > /dev/null 
    #ps ${SSH_AGENT_PID} doesn’t work under cywgin 
    ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { 
     start_agent; 
    } 
else 
    start_agent; 
fi 
0

根据您使用的shell,您可以为登录shell和常规的新shell设置不同的配置文件。一般而言,您希望为登录shell启动ssh-agent,但不是为每个子shell启动。例如,在bash中,这些文件将是.bashrc.bash_login

现在大多数桌面linuxes都为您运行ssh-agent。你只要使用ssh-add添加你的密钥,然后通过运行

 
ssh -A 
1

转发到远程SSH会话密钥,你可以这样做:

ssh-agent $SHELL 

这将导致的ssh-agent退出时shell退出。他们仍然不会在会话中共享,但至少当你这样做时他们会消失。

相关问题