在我的 中ssh_config
,我已将 SSH 配置为在连接到主机时使用特定密钥。我希望 SSH 尝试仅有的这个密钥,而不是它可能找到的任何其他密钥(在 ssh 代理或其他位置),所以我IdentitiesOnly
也指定了。
Host *.foobar.com
IdentityFile ~/.ssh/keys/id_ed25519
IdentitiesOnly yes
现在,密钥已受密码保护,以提高安全性。为了避免每次都输入密码,我已将其添加到ssh-agent
(以及其他一些密钥):
$ ssh-add -l
256 SHA256:1seMMJNjoexbRqNlVDe9kxkWm8s7fKAEuo+dP+hYut0 (ED25519)
2048 SHA256:p5SXMJNjoexbRqNl8roRamdzz+HFVlRKxtQoEW3vLu0 (RSA)
但是,当我尝试连接时,SSH 不断要求我输入密码来解密密钥。为什么?当我将配置更改为强制使用代理中的另一个密钥时,它就起作用了。
答案1
事实证明,尽管连接主机只需要私钥,但使用ssh-agent
公钥才能正常工作。我猜 SSH 是通过公钥部分来识别代理中可用的密钥的 - 如果没有公钥部分,它会认为密钥不可用。
另一个密钥起作用的原因是因为我在私钥旁边有一个相应的公钥 - 它看起来像这样:
~/.ssh/keys
├── id_ed25519
├── id_rsa
└── id_rsa.pub
添加公钥id_ed25519.pub
(对应私钥id_ed25519
)后,一切都开始按预期工作。