由于客户端 (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 编码密钥、注释。字段由空格分隔。
| 归档时间: |
|
| 查看次数: |
26451 次 |
| 最近记录: |