更具体地说,有一台主机可以通过多个名称连接,我想从已知的主机文件中查找对它的指纹。
/>
更新:我正在使用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
#1 楼
您已经在HashKnownHosts
文件中将yes
设置为“ ssh_config
”,因此主机名不是纯文本形式的。 ssh-keygen -H -F hostname
# Or, if SSH runs on port other than 22
ssh-keygen -H -F '[hostname]:2222'
这是
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.
评论
哈希已知主机本质上是否意味着不可能?即我需要知道主机的名称才能查看其信息?
–科林·纽维尔(Colin Newell)
2012年2月13日在15:54
@ColinNewell是的,您需要知道主机名。这是一项安全措施,可以防止攻击者在您的计算机受到威胁时获取您经常访问的其他服务器的主机名/ IP地址。
– pdo
2012-2-13 15:58
当根本没有输出时,不要害怕,但是不要尝试使用完整的合格主机名,而要尝试使用主机名。
–数学
13年5月7日在17:58
不是sshd_config,而是ssh_config。
–鱼监视器
13年11月21日在10:31
@pdo-您的命令并不总是有效。如果主机在22以外的端口上具有SSH,则known_hosts中的格式将不同。然后,您必须使用以下命令:ssh-keygen -H -F [host.example.com]:2222
–马丁·维格特(Martin Vegter)
2014年7月13日15:56
#2 楼
对于将来的搜索者而言,这篇文章(免责声明:我没有关系)具有一个相对简单的Perl脚本,用于在known_hosts
中强行强制使用哈希算法加密IP和主机名。 be / 2010/11/03 / bruteforcing-ssh-known_hosts-files / 它允许从特定IP地址开始。
此外,在2014年6月,John the Ripper项目添加了对known_hosts破解的支持,该破解可以利用多个CPU内核,GPU,字典处理,等。
总体而言,这与密码破解类似,但目标空间要更可预测(或至少受约束)。对于私有IP,您可以使用此方法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
如果包含公用IP,使用规则可能会更有效。该hashcat规则集可能需要进行其他工作才能适应与JtR一起使用,但需要承担很多繁重的工作,并且应该为您提供一个起点。
主机名对于用户和环境而言更具个性,但存在主机命名的趋势。可以在DNS,/ etc / hosts,shell历史记录等中将完全限定的主机名与任何发现的IP地址相关联。由于目标系统可能与主机系统完全不相关,因此可以从Internet范围内的各种扫描工作(例如Censys)的DNS数据中获取公用域和主机名的公共转储。除了最简单的情况以外,在所有公认的答案中,Ripper都可能比本地SSH解决方案更有效率,并且伸缩性更好。
评论
还有一个具有类似功能的python实现,可以在以下网站找到:blog.tremily.us/posts/known_hosts
–诺丁人
2014年6月12日14:44
Lars Nordin,谢谢你的提示。我将Remily的信息提交给了开膛手John团队,他们在出血的庞然大物中为此添加了支持:openwall.com/lists/john-users/2014/07/02/2
–罗伊斯·威廉姆斯
2014年7月13日15:00
这是使用hashcat的方法:up1ink.tumblr.com/post/132370869368/…
–罗伊斯·威廉姆斯
2015年11月3日,11:30
#3 楼
ssh-keygen -l -f ~/.ssh/known_hosts
有帮助吗?它显示该文件中每个主机的指纹。 (使用-v
,您还会获得漂亮的小藏宝图,例如+--[ RSA 2048]----+
| . |
| + . |
| . B . |
| o * + |
| X * S |
| + O o . . |
| . E . o |
| . . o |
| . . |
+-----------------+
评论
从最严格的意义上讲,不,它仍然是base64。 pdo对它被散列的解释表明这是一种方式,所以我猜除非我知道主机名,否则我将陷入困境。
–科林·纽维尔(Colin Newell)
2012-2-13 15:57
那帮助了我。我特别想要的是一种组合。要查找先前验证过的ssh指纹,可以运行:ssh-keygen -l -f〜/ .ssh / known_hosts -F <主机名>
–isaaclw
15年9月22日在21:30
嗯,ssh-keygen -l -F
–isaaclw
15年9月24日在15:08
#4 楼
使用-l
的ssh-keygen
选项列出指纹,并使用-F
选项在known_hosts
文件中搜索主机名。您的ssh-keyscan
到服务器上的一个。$ 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)
#5 楼
每个“ 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 [...] ==
评论
...因此awk'{print $ 1}'known_hosts可以解决问题。请注意,侦听非标准端口的服务器最终以known_hosts中的[some-server]:5555结尾。
–sr_
2012年2月13日14:35
不幸的是不在我的身边。我的看起来更像是base64编码的数据。数据也在我的文件中用管道定界。
–科林·纽维尔(Colin Newell)
2012年2月13日14:40在
那时您正在使用哪种ssh软件(我们假设您使用的是几乎标准的openssh软件)?
– Ouki
2012年2月13日在14:49
我为问题添加了更多详细信息。
–科林·纽维尔(Colin Newell)
2012年2月13日15:11
如@pdo所述,您的sshd作为“ HashKnownHosts”已设置为on,这可能看起来有点肛门,但实际上是出于安全考虑。当然,没有办法简单地消除哈希值并从“ known_hosts”中获取主机名。
– Ouki
2012年2月13日在15:41
评论
如果未进行哈希处理,则可以使用:unix.stackexchange.com/questions/236192/…