在ssh
客户端中,文件.ssh/knwon_hosts
可以使用纯文本(例如,在 FreeBSD 12.0 中会发生这种情况):
<ip_address> ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEIlD8R6Kxj9CdToar+3ay4B0yE65dP0EYoRJjEEgLjmvCTIv59DBp+0j2z0+NM0hxxJew79i1bYuN02lEvT2/E=
或者它可能被散列(如在 Ubuntu 18.04 中):
|1|3Et6QShrP2OrD4tWdOGP3jy3YC4=|f2FrJ5tOjjmFSrGWyen1DokJyLc= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIyZLGNvIADWL5SSkohBmDCVpLUzAHNejqQAXP3SSY300YIdNKCn3jqGmFAJiKB1CY0HnVirgFjdAKpyw3+6yzo=
问题1
是否可以从散列中获取纯文本行known_hosts
?
乌班图sshd 联机帮助页指出:
一行中只能出现一个散列主机名,并且不能应用上述任何否定或通配符运算符。
我不确定这是什么意思。
问题2
这是否意味着像这样的地址192.168.*.*
永远不能以 的哈希形式被接受known_hosts
,即使它们被创建为纯文本然后手动哈希?
正如在一个上一个问题,我正在使用这些客户端:OpenSSH_7.8p1, OpenSSL 1.1.1a-freebsd 20 Nov 2018
和OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
。
答案1
不,是,按这个顺序。散列该行的目的是掩盖您之前连接到的主机,因此散列函数的真正目的是使其(出于实际目的)无法判断主机名属于它。
通过扩展,您无法真正使通配符与散列主机名一起使用:如果我想连接到webhost47
,并且这些行已散列,我如何才能找到匹配的行webhost*
?哈希是一个活板门,我只能通过哈希webhost*
和检查找到该行。但我还必须检查?ebhost47
、w?bhost47
、??bhost47
等等,所以这不太合理。
(我想这个评论也意味着你不能
hashblurb1,hashblurb2 ssh-rsa …
使用散列主机名,即使您可以
hostname1,hostname2 ssh-rsa …
我现在还没有看到为什么你不能这样做的技术原因。)