不同的 SSH known_hosts 格式

cas*_*eif 14 ssh known-hosts

由于客户端 (CI) 拒绝远程的主机密钥(尽管它存在于 中),我最近在部署CI服务器时遇到了问题known_hosts。直到今天,当我意识到 SSH 以部署插件似乎不兼容的格式保存主机密钥时,我才被难住了。作为参考,兼容格式(仍然存在于我的个人机器上)类似于:

11.22.33.44 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCkVf7rhfC7nLxbeIQRj2bWitUC+XLSAeQ0ap8r8rKObDXYfPdB97NZth9JCEt3OrBXuBeg4PaAEuPu2QF7WXoT60hgAP6etr0W4LqcH59yd/X0ogFP7Y7hIf6dz1txDKaW92wgUi5XShwH6vukf0gLvW6/ak1LTBuoy72gaoUvxZge4KZivz9XqvSQHNOG9KYNfh8U6cRM8YTQo5in7YD5d6REV/FUmXpvBzCa9kbVRSlQFGYEc1HidTnPnJDteas3A9y3na385O7WN64aAkg7TO8IFXKdDHSwji9ZyrCVPA5GEuyLKhDFanV8iJ7CNflHMP8TwG5FOT2bSkV0lPyl
Run Code Online (Sandbox Code Playgroud)

虽然 SSH 当前在接受新主机密钥时保存的格式类似于:

11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
Run Code Online (Sandbox Code Playgroud)

(注意:虽然我对公钥做了一些捏造,但它们的原始形式仍然完全不相似。)

只有第一种格式与部署插件兼容,而第二种格式被无条件忽略。谁能解释这种差异?

Jak*_*uje 18

这些不是不同的 格式known_hosts,而是不同的密钥类型(ssh-rsa并且ecdsa-sha2-nistp256- 在 的手册页中有详细描述sshd)。服务器通常有更多不同类型的主机密钥,以提供与不同客户端的更广泛的兼容性。

如果您在服务器上,则可以找到所有主机密钥并使用以下方法打印它们的公钥(但该行的格式不同):

$ cat /etc/ssh/ssh_host_*.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU= user@host
Run Code Online (Sandbox Code Playgroud)

known_hosts文件接受的格式可以使用(从服务器实现密钥的真实性)获取:

$ ssh-keyscan 11.22.33.44
11.22.33.44 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEJJEs165NgdEcD94Xg3ySFA/qgkfytxNCX1X3pB2SPgU/mHLGXCXM8+VqMBXocM8OMOq2L0fDGr5mI+nGqjhNU=
#[...]
Run Code Online (Sandbox Code Playgroud)

这将打印您可以直接存储在客户端known_hosts文件中的格式。

对于整个图片(来自手册页):

这些文件中的每一行都包含以下字段:标记(可选)、主机名、密钥类型、base64 编码密钥、注释。字段由空格分隔。

  • 迟到但很愚蠢:您引用的格式(位、指数、模数)适用于协议 1,并且自 2000 年左右就已过时。发布时,有关authorized_keys 格式的 sshd 联机帮助页部分正确地描述了协议 1 和 2 格式,但是对于known_hosts 它只描述了 1. 2017 年的 OpenSSH 7.6(最终)删除了协议 1 逻辑,并修复了手册页以在两个地方描述协议 2。此外,默认情况下 `ssh-keyscan` 不包含 DSA(又名 ssh-dss)密钥,尽管 OpenSSH 人员认为 DSA 已被弃用,并且自 2015 年 7.0 以来它在默认情况下被禁用。 (2认同)