SSH代理在重新启动计算机时丢失身份


12

在名称id_rsa位于默认位置的键之后。我正在使用SSH代理向SSH代理添加身份ssh-add ~/.ssh/id_rsa,它添加成功。

我可以使用SSH代理而无需输入密钥的口令即可进行SSH。

但是,当我重新启动计算机或服务器,然后使用命令检查身份时,ssh-add -L我收到如下消息The agent has no identities

这是否意味着当我们重新启动计算机时,代理会丢失身份?这是正常的行为还是我在这里缺少的东西?

请指导我,我对SSH不太熟悉。


请在Unix&Linux网站上查看此线程
janosdivenyi

Answers:


12

这是正常的。密钥代理的目的只是将解密的密钥保存在内存中,但永远不会将其写入磁盘。(这会破坏目的–为什么不只是取消保护主键呢?)

因此,每次登录时都必须解锁密钥,并且您需要自动执行此操作–在Linux上,使用pam_ssh是一种选择。它会自动使用您的操作系统密码来解锁代理。另一个类似的模块是pam_envoy,它的可靠性稍高一些(但需要systemd)。

这两个模块都将启动代理本身并自动加载密钥。


任何想法如何在Mac OS X终端上自动化?
Niks

当我运行命令时, $SSH_AUTH_SOCK 我得到的结果是::-bash: /tmp/ssh-gT43vE99vk/agent.511权限被拒绝,我在这里感到困惑。
Niks

它并不是要用作命令-它是一个变量,您可以将其用作另一个命令的一部分。例如echo $SSH_AUTH_SOCK打印其值。
user1686

嘿哥们..有什么想法吗?stackoverflow.com/questions/31916395/...
NIKS

2

尝试到您的〜/ .bashrc

if [ ! -S ~/.ssh/id_rsa ]; then
  eval `ssh-agent`
  ln -sf "$SSH_AUTH_SOCK" ~/.ssh/id_rsa
  ssh-add
fi
export SSH_AUTH_SOCK=~/.ssh/id_rsa

登录后,仅应提示输入密码。


感谢您的答复,这意味着SSH代理正常工作。在添加此内容后,是否不需要每次启动计算机时都添加身份?抱歉,这是一个愚蠢的问题,但是我对ssh很陌生。
尼克斯,2015年

如果ssh键具有密码,则每次登录时都会提示。
Shiro

这个答案是有害的。如果按照提示操作,它将删除您的私钥。如果没有其他方法可以进行身份​​验证,则将无法访问使用公共密钥身份验证的系统。
kasperd

2

在OS X上,如果您决定将私钥存储在其中,则ssh-add具有一个特殊的标志来连接到钥匙串。

快跑ssh-add -K ~/.ssh/id_rsa

我相信这可以更全面地回答您的问题。很难找到此OS X特定标志,但是至少从OS X Leopard以来,它一直在起作用。


2
这是正确的答案,然后是a ssh-add -A,它将在Keychain中添加所有密钥。此外,还创建~/.ssh/config并添加UseKeychain yes这样的MacOS将永远保留你的密钥,如下所述:unix.stackexchange.com/questions/140075/...
lucasarruda

即使重新尝试,我的MacBook仍然会忘记我的身份。
多米尼克·塞耶斯

0

如果您的ssh密钥受密码保护,则此解决方案很方便。

上面所有答案的问题在于,如果您的私钥受到密码保护,则每次启动新终端并尝试使用私钥时,您都必须输入密码,并且最终将运行ssh-agentin的多个副本。记忆。解决方案是在~/.bashrc或中添加以下内容~/.zshrc

##### START Fix for ssh-agent #####
# Ref: http://mah.everybody.org/docs/ssh

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
##### END Fix for ssh-agent #####

启动终端时,这仅会要求您输入一次ssh私钥的密码。随后打开新的终端会话(或tmux冲突)将重用由以上代码段创建的ssh-agent。

参考

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.