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
。