![为什么 ssh-agent 不保存我的未加密密钥以供日后使用?](https://linux22.com/image/808911/%E4%B8%BA%E4%BB%80%E4%B9%88%20ssh-agent%20%E4%B8%8D%E4%BF%9D%E5%AD%98%E6%88%91%E7%9A%84%E6%9C%AA%E5%8A%A0%E5%AF%86%E5%AF%86%E9%92%A5%E4%BB%A5%E4%BE%9B%E6%97%A5%E5%90%8E%E4%BD%BF%E7%94%A8%EF%BC%9F.png)
每次我从我们的无头式 Ubuntu 服务器通过 SSH 连接到另一台服务器时,系统都会要求我输入密钥文件的密码。即使我之前已经连接到该服务器。
你知道这是为什么吗? 这可能是因为ssh-agent
目前没有运行之类的简单原因。
我的 Ubuntu Gnome 桌面上的相同密钥工作正常。服务器和桌面均运行 Ubuntu 10.10。
ps -ef | grep '[s]sh-agent'
simon 3219 1 0 12:46 ? 00:00:00 ssh-agent
答案1
即使代理已启动,如果未设置某些环境变量,您也无法引用代理。此外,即使一切正常,代理和变量、身份也不会自动发送给代理:这是 的任务,ssh-askpass
仅在 X 会话中起作用。
如果您使用 bash,请创建~/.bash_profile
包含以下内容的文件:
# File: ~/.bash_profile
# source ~/.profile, if available
if [[ -r ~/.profile ]]; then
. ~/.profile
fi
# start agent and set environment variables, if needed
agent_started=0
if ! env | grep -q SSH_AGENT_PID >/dev/null; then
echo "Starting ssh agent"
eval $(ssh-agent -s)
agent_started=1
fi
# ssh become a function, adding identity to agent when needed
ssh() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/ssh "$@"
}
export -f ssh
# another example: git
git() {
if ! ssh-add -l >/dev/null 2>&-; then
ssh-add ~/.ssh/id_dsa
fi
/usr/bin/git "$@"
}
export -f git
~/.ssh/id_dsa
根据需要修改文件名,并将此行添加到~/.bash_logout
# stuff to add at end of ~/.bash_logout
if ((agent_started)); then
echo "Killing ssh agent"
ssh-agent -k
fi
最后要注意的是:这不会干扰 gnome 会话,因为在这种情况下仅有~/.profile
来源,并且您可以从ssh-askpass
要求输入密码并将其发送到的图形界面中受益ssh-agent
。
答案2
我最近开始使用 ssh-ident:
https://github.com/ccontavalli/ssh-ident
您所要做的就是添加类似以下内容的内容:
alias ssh="/path/to/ssh-ident"
在你的 中.bashrc
。或者,你可以在 PATH 中的和ln -s /path/to/ssh-ident ~/bin/ssh
之前添加 或其他目录。/bin
/usr/bin
答案3
这个问题在超级用户。
我发现使用 Keychain 的提示非常有用。