为什么 authorized_keys 文件不能阻止 SSH 提示“主机的真实性无法成立”?

为什么 authorized_keys 文件不能阻止 SSH 提示“主机的真实性无法成立”?

我已经使用 ssh-keygen 创建了 2 个密钥对,一个在服务器上,一个在客户端上。

然后,我将服务器的公钥添加到客户端的 $HOME/.ssh/authorized_keys 文件中,反之亦然。

当我尝试从客户端 ssh 到服务器时,仍然看到

The authenticity of host <host> can't be established
ECDSA key fingerprint is SHA256:<hash>

为什么会发生这种情况?我期望在公钥存在的情况下,主机的身份验证可以建立。另外,我自己没有创建 ECDSA 密钥,只有 RSA 密钥。这是内置密钥吗?

答案1

你让人困惑确认服务器及其主机密钥(由客户端完成)验证ssh 用户登录(由服务器完成)。

使用主机密钥在客户端上验证主机的真实性。这可以防止可能冒充您的服务器的 MITM 攻击。主机密钥保存在服务器上的文件中,/etc/ssh/ssh_host*key客户端上的~/.ssh/known_hosts文件中。

使用连接到服务器ssh -vvv显示以下内容:

debug1: Server host key: ecdsa-sha2-nistp256 SHA256:fYR10r/RKXIzOmJYbgbDi29E10oW7MLjto2plpALaBY
debug3: hostkeys_foreach: reading file "/home/xxxx/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/xxxx/.ssh/known_hosts:69
debug3: load_hostkeys: loaded 1 keys from xx.xx.xx.xx
debug1: Host 'xx.xx.xx.xx' is known and matches the ECDSA host key.
  1. 服务器发送主机密钥
  2. 客户端搜索密钥known_hosts
  3. 客户端加载并验证密钥

您无需手动创建主机密钥,此操作会自动完成。在客户端,您无需手动添加主机密钥,因为这会在第一次连接到服务器时完成(您必须输入“yes”)。

当主机密钥由于服务器的新安装而发生变化时,您需要从文件中删除该密钥known_hosts,否则ssh将拒绝连接,除非您-o StrictHostKeyChecking=no设置了选项,但我不建议这样做。


当您将服务器上的 ssh 密钥添加到客户端authorized_keys文件时,您授权从服务器到客户端的用户进行连接,这可能不是您想要的。我建议您删除客户端上的密钥。


进一步阅读:

答案2

.pub您收到此消息是因为“ECDSA 密钥指纹”,而不是公共 RSA 密钥。当您手动复制公钥文件的内容时.ssh/known_hosts,指纹不包含在内。

如果您查看known_hosts已接受该消息的任何其他条目:

The authenticity of host '<host>' can't be established.
RSA key fingerprint is SHA256:fingerprint.
Are you sure you want to continue connecting (yes/no)?

您将在密钥类型前找到一个字符串(ssh-rsaecdsa-sha2-nistp256等...)。这是指纹,可以使用ssh-keygen -lf <public_key_file>(位于/etc/ssh/您的服务器中)手动计算,也可以ssh-keygen -l -F <domain_or_ip>从您的客户端计算。

此外,此消息是选项 的结果StrictHostKeyChecking。出于安全考虑,此消息默认处于激活状态,但可以使用 禁用ssh -o "StrictHostKeyChecking=no" user@host,这样ssh存储指纹时就不会出现任何消​​息(正如我所说,不推荐)。

这个问题和你的问题有某种关联:https://serverfault.com/questions/422869/answer-yes-to-ssh-copy-id-first-time-run-by-script

答案3

您可以通过执行以下命令将您的客户端密钥传输到您的服务器(您不需要将服务器密钥传输到客户端):

ssh-copy-id <your-ssh-server-ip_or_hostname>

之后你就可以通过密钥对登录了ssh <your-ssh-server-ip_or_hostname>

编辑:

您的 ecdsa(椭圆曲线密钥)是您的服务器密钥,该密钥传输是自动的。您的服务器是否已重新安装,因此有新的服务器密钥?

您可以通过执行以下操作从客户端删除服务器密钥:

ssh-keygen -R <your-ssh-server-ip_or_hostname>

相关内容