ssh、散列的known_hosts:提取纯文本并使用通配符

ssh、散列的known_hosts:提取纯文本并使用通配符

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 2018OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017

答案1

不,是,按这个顺序。散列该行的目的是掩盖您之前连接到的主机,因此散列函数的真正目的是使其(出于实际目的)无法判断主机名属于它。

通过扩展,您无法真正使通配符与散列主机名一起使用:如果我想连接到webhost47,并且这些行已散列,我如何才能找到匹配的行webhost*?哈希是一个活板门,我只能通过哈希webhost*和检查找到该行。但我还必须检查?ebhost47w?bhost47??bhost47等等,所以这不太合理。

(我想这个评论也意味着你不能

hashblurb1,hashblurb2 ssh-rsa …

使用散列主机名,即使您可以

hostname1,hostname2 ssh-rsa …

我现在还没有看到为什么你不能这样做的技术原因。)

相关内容