SSH 代理在重启机器时丢失身份

SSH 代理在重启机器时丢失身份

id_rsa在默认位置创建具有名称的密钥后。我正在使用命令将身份添加到 SSH 代理ssh-add ~/.ssh/id_rsa,添加成功。

我无需输入密钥密码即可使用 SSH,因为它已经有 SSH 代理了。

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

这是否意味着当我们重新启动机器时,代理会丢失身份?这是正常行为还是我遗漏了什么?

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

答案1

这是正常的。密钥代理的目的只是保存解密的密钥在记忆中,但它永远不会将它们写入磁盘。(这会违背目的——为什么不直接取消保护主密钥呢?)

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

两个模块都会启动代理并自动加载密钥。

答案2

在 OS X 上,如果您决定将私钥存储在 Keychain 中,ssh-add 有一个特殊标志可以连接到 Keychain。

赶紧跑ssh-add -K ~/.ssh/id_rsa

我相信这更全面地回答了您的问题。这个 OS X 特定标志很难找到文档,但它至少从 OS X Leopard 开始就一直有效。

答案3

尝试一下~/.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

仅当您登录时才会提示输入密码。

答案4

每次重启后都需要解锁才能将其加载到内存中。为此,请将以下内容添加到您的~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/id_rsa

创建密钥对时不要命名id_rsa。为密钥指定一个与您要访问的资源相关的有意义的名称。可以是任何名称,默认名称没有什么特别的id_rsa

相关内容