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

时间:2020-03-06 14:26:14  来源:igfitidea点击:

我在Linux上将ssh-agent与受密码保护的密钥一起使用。每次登录到特定计算机时,我都会这样做:

eval `ssh-agent` && ssh-add

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

解决方案

我们对这台机器有多少控制权?一种答案是将ssh-agent作为守护进程运行。其他选项在此网页上进行了说明,基本上是进行测试以查看代理是否在周围,然后运行(如果没有)。

要在此处重现一种想法:

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

看看钥匙扣。这是写给与自己处境相似的人写的。
钥匙链

根据我们使用的外壳,可以为登录外壳和仅常规的新外壳设置不同的配置文件。通常,我们要为登录外壳启动ssh-agent,而不是为每个子外壳启动。例如,在bash中,这些文件将是.bashrc和.bash_login。

如今,大多数台式机Linux都会为我们运行ssh-agent。我们只需使用ssh-add添加密钥,然后通过运行将密钥转发到远程ssh会话

ssh -A

你可以做:

ssh-agent $SHELL

当外壳退出时,这将导致ssh-agent退出。它们仍然不会在会话之间共享,但是至少它们会在我们共享时消失。