我有一个关于 ssh 公钥身份验证的问题。我在 RHEL 9 机器上生成了一个密钥对(受密码保护),如下所示:
ssh-keygen -f .ssh/key2
然后,我将公钥复制到远程主机上:
ssh-copy-id -i .ssh/key2.pub operator1@servera
现在,当我尝试连接时,仍然会询问密钥密码:
ssh -i .ssh/key2 operator1@servera
在执行过程中添加 -v 选项表明服务器接受了密钥:
No Kerberos credentials available (default cache: KCM:)
debug1: No credentials were supplied, or the credentials were unavailable or inaccessible
No Kerberos credentials available (default cache: KCM:)
debug1: Next authentication method: publickey
debug1: Offering public key: .ssh/key2 RSA SHA256:wzFYOSGEvzLSjgKe5EGlKXXuaWmFmG8E6gfxs2KG6Pg explicit
debug1: Server accepts key: .ssh/key2 RSA SHA256:wzFYOSGEvzLSjgKe5EGlKXXuaWmFmG8E6gfxs2KG6Pg explicit
那么为什么要求我输入密码呢?旁注:我已经授予 .ssh 文件夹权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/key2
答案1
SSH 密码保护密钥。要直接使用密钥或将其加载到 SSH 代理中时使用密钥ssh
,您必须通过提供创建密钥时使用的密码来解锁它。
如果您不想在使用时提供密码ssh
,请使用以下命令将其加载到已运行的 SSH 代理中:
ssh-add ~/.ssh/key2
这将要求提供密钥的密码一次,但随后允许您ssh
连接到适当的远程主机,而无需再次以交互方式键入密码(直到代理终止或从代理中删除密钥)。
在评论中,您似乎认为由于公钥已复制到远程系统,因此您不需要提供 SSH 密钥的密码。您必须在需要时提供密钥的密码(在ssh
没有代理的情况下连接时,或将密钥加载到代理中时)。公钥需要位于远程系统上,您才能使用 SSH 密钥身份验证,无论密钥是否受密码保护。