我在Linux上使用带密码保护密钥的ssh-agent。每次登录某台机器时,我都会这样做:
eval `ssh-agent` && ssh-add
这很好用,但每次我登录并执行此操作时,我都会创建另一个ssh-agent。偶尔,我会做一个killall ssh-agent
来收获它们。是否有一种简单的方法可以在不同的会话中重用相同的ssh-agent流程?
答案 0 :(得分:5)
看看Keychain。它写给了与你自己类似情况的人。 Keychain
答案 1 :(得分:3)
你对这台机器有多少控制?一个答案是将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
答案 2 :(得分:1)
你可以这样做:
ssh-agent $SHELL
这将导致ssh-agent在shell退出时退出。它们仍然不会在会话期间共享,但至少它们会在您离开时消失。
答案 3 :(得分:0)
根据您使用的shell,您可以为登录shell和常规新shell设置不同的配置文件。通常,您希望为登录shell启动ssh-agent,但不是为每个子shell启动。例如,在bash中,这些文件为.bashrc
和.bash_login
。
现在大多数桌面Linux都会为你运行ssh-agent。您只需使用ssh-add添加密钥,然后通过运行
将密钥转发到远程ssh会话ssh -A