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