我在 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 $SHELL
这将导致 ssh-agent 在 shell 退出时退出。它们仍然不会在会话之间共享,但至少当你这样做时它们会消失。
根据您使用的 shell,您可以为登录 shell 和普通的新 shell 设置不同的配置文件。通常,您希望为登录 shell 启动 ssh-agent,但不是为每个子 shell 启动。例如,在 bash 中,这些文件将是.bashrc
and .bash_login
。
如今,大多数桌面 linux 都为您运行 ssh-agent。您只需使用 ssh-add 添加密钥,然后通过运行将密钥转发到远程 ssh 会话
ssh -A