
在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 …
我現在還沒有看到為什麼你不能這樣做的技術原因。