如果*客户端*机器有一个伪造的公钥,为什么/如何导致 SSH 验证失败?

如果*客户端*机器有一个伪造的公钥,为什么/如何导致 SSH 验证失败?

在 上,我分别将和clienthost存储为 ,即 pub:priv 密钥对。在 上,我已在 中正确保存公钥,因此我可以使用 进行登录。~/.ssh/foo~/.ssh/foo.pubremotehost~/.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

在这种用例中,客户端会读取两个密钥(公钥和私钥分别存储在不同的文件中),但不需要向您询问密码,并且除非知道服务器接受该密钥,否则不会解密私钥部分。

如果您将公钥修改为服务器不接受的其他内容,则不会执行身份验证的第二步。这样一来,您就破坏了使其正常工作所需的“配对”。

相关内容