在 上,我分别将和clienthost
存储为 ,即 pub:priv 密钥对。在 上,我已在 中正确保存公钥,因此我可以使用 进行登录。~/.ssh/foo
~/.ssh/foo.pub
remotehost
~/.ssh/authorized_keys
-i ~/.ssh/foo
登录(当然)并不取决于是否存在clienthost:~/.ssh/foo.pub
:如果我重命名~/.ssh/foo.pub
为~/.ssh/bar.pub
没有任何变化。
但如果我更改一个字符,clienthost:~/.ssh/foo.pub
使其看起来仍然像一个有效的公钥,但不再对应于私钥,我就无法登录。为什么呢?
SSH 为什么/如何关心公钥与私钥的补充是否完整——以及为什么是${privkey}.pub
搜索路径?
答案1
这种行为可能令人困惑,但完全有道理。让我们考虑最常见的用例,即私钥已加密且未存储在 中ssh-agent
。
在这种用例中,客户端会读取两个密钥(公钥和私钥分别存储在不同的文件中),但不需要向您询问密码,并且除非知道服务器接受该密钥,否则不会解密私钥部分。
如果您将公钥修改为服务器不接受的其他内容,则不会执行身份验证的第二步。这样一来,您就破坏了使其正常工作所需的“配对”。