带有密码的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退出。它们仍然不会在会话之间共享,但是至少它们会在我们共享时消失。

