为什么ssh-agent不会保存我未加密的密钥供以后使用?

每当我从无头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 

即使代理已启动,如果未设置某些环境变量,也不会引用代理。 此外,即使一切正常,代理和变量,身份也不会自动发送给代理:这是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

我最近开始使用ssh-ident:

https://github.com/ccontavalli/ssh-ident

你所要做的就是添加如下内容:

 alias ssh="/path/to/ssh-ident" 

在你的.bashrc 。 或者,您可以在/bin/usr/bin之前使用ln -s /path/to/ssh-ident ~/bin/ssh或PATH中的其他目录。

这个问题在SuperUser上有一个很好的答案。

我发现使用Keychain的提示非常有用。