是否可以在known_hosts文件中找到主机?


115

我想知道known_hosts文件中包含哪些主机,但似乎无法读取。可以阅读吗?

更具体地说,有一台主机可以通过多个名称连接,我想从已知主机文件中找出对它的指纹要求。

更新:我正在使用OpenSSH_5.3p1 Debian-3ubuntu7,OpenSSL 0.9.8k 2009年3月25日

我的known_hosts文件中的一行看起来像这样,

|1|guO7PbLLb5FWIpxNZHF03ESTTKg=|r002DA8L2JUYRVykUh7jcVUHeYE= ssh-rsa AAAAB3NzaC1yc2EAAFADAQABAAABAQDWp73ulfigmbbzif051okmDMh5yZt/DlZnsx3DEOYHu3Nu/+THJnUAfkfEc1XkOFiFgbUyK/08Ty0K6ExUaffb1ERfXXyyp63rpCTHOPonSrnK7adl7YoPDd4BcIUZd1Dk7HtuShMmuk4l83X623cr9exbfm+DRaeyFNMFSEkMzztBYIkhpA2DWlDkd90OfVAvyoOrJPxztmIZR82qu/5t2z58sJ6Jm2xdp2ckySgXulq6S4k+hnnGuz2p1klviYCWGJMZfyAB+V+MTjGGD/cj0SkL5v/sa/Fie1zcv1SLs466x3H0kMllz6gAk0/FMi7eULspwnIp65g45qUAL3Oj

如果未进行哈希处理,则可以使用:unix.stackexchange.com/questions/236192/…–
Benjamin Goodacre

Answers:


134

您已在文件HashKnownHosts中将其设置为“ yesssh_config,因此主机名不是纯文本格式。

如果您提前知道要查找的主机名,则可以使用以下命令进行搜索:

    ssh-keygen -H -F hostname

这是ssh-keygen(1)手册页中的相关部分:

 -F hostname
         Search for the specified hostname in a known_hosts file, listing
         any occurrences found.  This option is useful to find hashed host
         names or addresses and may also be used in conjunction with the
         -H option to print found keys in a hashed format.

3
哈希已知主机本质上是否意味着不可能?即我需要知道主机的名称才能查看其信息?
Colin Newell

7
@ColinNewell是的,您需要知道主机名。这是一种安全措施,可以防止攻击者在您的计算机受到威胁时获取您经常访问的其他服务器的主机名/ IP地址。
pdo 2012年

1
当根本没有输出时,不要害怕,但是不要尝试使用完整的合格主机名,而是尝试使用主机名。
数学

6
不是sshd_config,而是ssh_config。
Fish Monitor

9
@pdo-您的命令并不总是有效。如果主机在以外的端口上具有SSH 22,则格式known_hosts不同。然后,您必须使用以下命令: ssh-keygen -H -F [host.example.com]:2222
Martin Vegter 2014年

17

对于将来的搜索者而言,本文(非免责声明:我没有关系)具有一个相对简单的Perl脚本,用于暴力破解哈希IP和主机名known_hosts

http://blog.rootshell.be/2010/11/03/bruteforcing-ssh-known_hosts-files/

它允许从特定的IP地址开始。也可以很容易地对其进行修改以使用字典。

此外,在2014年6月,John Ripper项目增加了对known_hosts破解的支持,该功能可以利用多个CPU内核,GPU,字典修改等功能。

您还可以使用此nmap代码段生成所有RFC1918 IP地址的字典,以用作字典:

nmap -sL -Pn -n 192.168.0.0/16 172.16.0.0/12 10.0.0.0/8 |\
    grep '^Nmap scan report for' | cut -d\  -f5 >ips.list

1
还有一个具有类似功能的python实现,可以在以下网址
Lars Nordin

Lars Nordin,谢谢你的提示。我向开膛手John团队提交了Remily的信息,他们在流血的麻烦中
Royce Williams


4

ssh-keygen -l -f ~/.ssh/known_hosts帮助吗?(使用-v您还会获得漂亮的小藏宝图,例如

+--[ RSA 2048]----+
|        .        |
|       + .       |
|      . B .      |
|     o * +       |
|    X * S        |
|   + O o . .     |
|    .   E . o    |
|       . . o     |
|        . .      |
+-----------------+

2
从最严格的意义上讲,不,它仍然是base64。pdo对它被散列的解释表明这是一种方式,所以我猜除非我知道主机名,否则我将陷入困境。
Colin Newell

那帮助了我。我特别想要的是一种组合。要查找先前验证过的ssh指纹,您可以运行:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw 2015年

呃,ssh-keygen -l -F <hostname>甚至更简单
isaaclw

2

每条“ known_hosts”行的开头都有主机字符串/ ip(在“ ssh-dss”或“ ssh-rsa”字符串之前):

hostgn6 ssh-dss AAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExIThOj3Yexynu+wSRGjMm4GfF+og2kAljZyUjhBFeM+WYbJzcDSDB [...] ==
yumyumn6.dik6.dir2g.some.net ssh-dss AAAAB3NzaC1kc3MAAACBAIfGV4+/28Zr+dT/i+ifydUBS0dMRUjCtExITh [...] ==

2
...因此awk '{print $1}' known_hosts就可以了。请注意,侦听非标准端口的服务器最终以 [some-server]:5555in表示known_hosts
sr_

3
不幸的是不在我的身边。我的看起来更像是base64编码的数据。数据也在我的文件中用管道定界。
Colin Newell

您正在使用哪种ssh软件(假设您使用的是几乎标准的openssh软件)?
Ouki 2012年

我为问题添加了更多详细信息。
Colin Newell

7
如@pdo所述,您的sshd作为“ HashKnownHosts”已设置为on,这可能看起来有点肛门,但实际上是出于安全考虑。当然,没有办法简单地消除哈希值并从“ known_hosts”中获取主机名。
Ouki 2012年

2

使用此-l选项可ssh-keygen列出指纹,并使用该-F选项在known_hosts文件中搜索主机名。

$ ssh-keygen -l -F sdf.org
# Host sdf.org found: line 835 type RSA
2048 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17 |1|9J47PEllvWk/HJ6LPz5pOB2/7rc=|ld0BtQh5V3NdhBHBwR/ZqSv8bqY= (RSA)

您可以ssh-keyscan用来将您的指纹known_hosts与服务器上的指纹进行比较。

$ ssh-keyscan sdf.org | awk '{print $3}' | base64 -d | openssl md5 -c
# sdf.org SSH-2.0-OpenSSH_7.1
# sdf.org SSH-2.0-OpenSSH_7.1
no hostkey alg
(stdin)= 6e:cd:53:4f:75:a1:e8:5b:63:74:32:4f:0c:85:05:17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.