带密码的ssh-agent,不会产生太多进程

时间:2008-09-19 14:41:40

标签: linux ssh

我在Linux上使用带密码保护密钥的ssh-agent。每次登录某台机器时,我都会这样做:

eval `ssh-agent` && ssh-add

这很好用,但每次我登录并执行此操作时,我都会创建另一个ssh-agent。偶尔,我会做一个killall ssh-agent来收获它们。是否有一种简单的方法可以在不同的会话中重用相同的ssh-agent流程?

4 个答案:

答案 0 :(得分:5)

看看Keychain。它写给了与你自己类似情况的人。 Keychain

答案 1 :(得分: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 

答案 2 :(得分:1)

你可以这样做:

ssh-agent $SHELL

这将导致ssh-agent在shell退出时退出。它们仍然不会在会话期间共享,但至少它们会在您离开时消失。

答案 3 :(得分:0)

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

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

将密钥转发到远程ssh会话
ssh -A