带密码的ssh-agent不会产生太多进程
问题描述:
我在Linux上使用带密码保护密钥的ssh-agent。每次我登录到某台机器,我这样做:带密码的ssh-agent不会产生太多进程
eval `ssh-agent` && ssh-add
此作品不够好,但我每次登录,这样做的时候,我创建另一个的ssh-agent。偶尔,我会做一个killall ssh-agent
收获它们。是否有一种简单的方法可以在不同的会话中重复使用相同的ssh-agent进程?
答
你对这台机器有多少控制?一个答案是将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
答
根据您使用的shell,您可以为登录shell和常规的新shell设置不同的配置文件。一般而言,您希望为登录shell启动ssh-agent,但不是为每个子shell启动。例如,在bash中,这些文件将是.bashrc
和.bash_login
。
现在大多数桌面linuxes都为您运行ssh-agent。你只要使用ssh-add添加你的密钥,然后通过运行
ssh -A
答
转发到远程SSH会话密钥,你可以这样做:
ssh-agent $SHELL
这将导致的ssh-agent退出时shell退出。他们仍然不会在会话中共享,但至少当你这样做时他们会消失。
另请参阅这个优秀的答案:http://unix.stackexchange.com/a/90869/92102 – 2014-11-19 14:42:22