6

我在 Linux 上使用 ssh-agent 和受密码保护的密钥。每次我登录到某台机器时,我都会这样做:

eval `ssh-agent` && ssh-add

这工作得很好,但每次我登录并执行此操作时,我都会创建另一个 ssh-agent。偶尔,我会killall ssh-agent收割它们。有没有一种简单的方法可以在不同的会话中重用相同的 ssh-agent 进程?

4

4 回答 4

5

看看钥匙串。它是由与你处境相似的人写的。 钥匙链

于 2008-09-19T14:47:18.153 回答
3

你对这台机器有多少控制权?一种答案是将 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 
于 2008-09-19T14:46:06.720 回答
2

你可以做:

ssh-agent $SHELL

这将导致 ssh-agent 在 shell 退出时退出。它们仍然不会在会话之间共享,但至少当你这样做时它们会消失。

于 2008-09-20T01:40:55.133 回答
0

根据您使用的 shell,您可以为登录 shell 和普通的新 shell 设置不同的配置文件。通常,您希望为登录 shell 启动 ssh-agent,但不是为每个子 shell 启动。例如,在 bash 中,这些文件将是.bashrcand .bash_login

如今,大多数桌面 linux 都为您运行 ssh-agent。您只需使用 ssh-add 添加密钥,然后通过运行将密钥转发到远程 ssh 会话

ssh -A
于 2008-09-20T01:37:46.217 回答