我有一个安全传输系统,我将主机密钥推送到数据库,我尝试安装在 Ubuntu 15 计算机上生成的密钥,并将它们安装在 SLES 11 计算机上,我尝试安装生成的密钥在 Centos 7 机器上 在 Ubuntu 15 机器上。
那么,这些机器是否有一个通用的机制来安装主机密钥,这真的很令人困惑,我想我有点过于谨慎了。一切都应该是自动化的,我找到了一个收集钥匙的好方法,我只是不知道将它们放在机器上的正确位置
这是 centos 机器上的密钥:
[root@centos ~]# cat /etc/ssh/ssh_host_ecdsa_key.pub ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIl8BT33T4sEAgG56CItPWep/N3IKaUaw8Xy6Fn6k9SLsARi9zZk9FAd6H6DfbIxzkz1sjSjfq1JSVyd3slKf4M=
这是当我将它导入(通过 ssh 手动接受它)到我的 ubuntu 机器上的knownhosts中时的样子
root@ubuntu:/home# cat aaron/.ssh/known_hosts |1|F+Hr+T8eulEpFFFhwdJKdcOg6yQ=|yM/XLEkDPFUWO/g9vPOONBkRvtE= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIl8BT33T4sEAgG56CItPWep/N3IKaUaw8Xy6Fn6k9SLsARi9zZk9FAd6H6DfbIxzkz1sjSjfq1JSVyd3slKf4M=
因此,known_hosts 文件中的第一部分看起来是加密的,而在 SLES 计算机上,该部分未加密,因此更简单一些。
所以我的问题是
- 我如何得出该加密部分,以便我可以将其回显到known_hosts 文件中?
- 我如何知道给定的 Linux 系统是否期望第一个块被加密?
答案1
sshd
描述文件格式的手册页:
SSH_KNOWN_HOSTS 文件格式
/etc/ssh/ssh_known_hosts
和文件~/.ssh/known_hosts
包含所有已知主机的主机公钥。全局文件应由管理员准备(可选),并且自动维护每用户文件:每当用户从未知主机连接时,其密钥都会添加到每用户文件中。这些文件中的每一行包含以下字段:标记(可选),主机名、位、指数、模数、注释。字段之间用空格分隔。
[...]
交替,主机名可以以散列形式存储如果文件内容被泄露,它会隐藏主机名和地址。哈希主机名以“|”开头特点。一行中只能出现一个散列主机名,并且不能应用上述任何否定或通配符运算符。
只是该部分bits, exponent, modulus
现在一起用作公钥。主机名经过哈希处理,但您可以将其写为字符串,然后运行ssh-keygen
该文件:
ssh-keygen -H [-f known_hosts_file]
例如ssh-keygen -H -f ~/.ssh/known_hosts
答案2
不强制要求您保持hostname
加密状态
192.168.0.105 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIl8BT33T4sEAgG56CItPWep/N3IKaUaw8Xy6Fn6k9SLsARi9zZk9FAd6H6DfbIxzkz1sjSjfq1JSVyd3slKf4M=