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/...
ベンジャミンGoodacre

回答:


135

あなたはガットHashKnownHostsに「設定yes」あなたにはssh_configファイルなので、ホスト名は平文では利用できません。

探しているホスト名が事前にわかっている場合は、次のコマンドで検索できます。

    ssh-keygen -H -F hostname

ssh-keygen(1)manページの関連セクションは次のとおりです。

 -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
既知のホストをハッシュすることは、本質的に不可能であることを意味しますか?すなわち、情報を見るためにホストの名前を知る必要がありますか?
コリン・ニューウェル

7
@ColinNewellそうです、ホスト名を知る必要があります。これは、マシンが侵害された場合に、攻撃者が頻繁に使用する他のボックスのホスト名/ IPアドレスを収集しないようにするためのセキュリティ対策です。
PDO

1
出力がまったくない場合でも心配しないでください。ただし、完全修飾ホスト名ではなく、ホスト名を試してください。
数学

6
sshd_configではなく、ssh_config。
魚モニター

9
@pdo-コマンドが常に機能するとは限りません。ホストのポートがSSH以外の場合22、フォーマットknown_hostsは異なります。:その後、次のコマンドを使用する必要があります ssh-keygen -H -F [host.example.com]:2222
マーティンVegter

17

将来の検索者のために、この記事(免責事項:私は所属していません)には、ハッシュされたIPとホスト名をブルートフォースする比較的単純なPerlスクリプトがありknown_hostsます。

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

特定のIPアドレスから開始できます。辞書を使用するように簡単に変更することもできます。

また、2014年6月、John the Ripperプロジェクトはknown_hosts crackingのサポートを追加しました。これにより、複数の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実装もあります:blog.tremily.us/posts/known_hosts
Lars Nordin

Lars Nordin、ヒントをありがとう。Remilyの情報をJohn the Ripperチームに提出し、bleeding-jumboでこのサポートを追加しました:openwall.com/lists/john-users/2014/07/02/2
Royce Williams

1
そして、ここでhashcatでそれを行う方法は次のとおりです。up1ink.tumblr.com/post/132370869368/...
ロイス・ウィリアムズ

4

ssh-keygen -l -f ~/.ssh/known_hosts助けて?(-vあなたを使用すると、素敵な小さな宝の地図も得られます、例えば

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

2
厳密な意味ではありません。いまだにすべてbase64です。ハッシュされているというpdoの説明は、それが一方向のものであることを示唆しているので、ホスト名がわからなければスタックしていると思います。
コリン・ニューウェル

それは私を助けました。私が特に欲しかったのは組み合わせでした。以前に検証済みのSSH指紋を見つけるには、実行することができます:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw

ええと、ssh-keygen -l -F <hostname>もっと簡単です
-isaaclw

2

各「known_hosts」行の先頭(「ssh-dss」または「ssh-rsa」文字列の前)にホスト文字列/ IPがあります。

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]:5555known_hosts
sr_

3
残念ながら私のものではありません。私はbase64でエンコードされたデータのように見えます。データは、ファイル内でもパイプで区切られています。
コリン・ニューウェル

そのとき、どのsshソフトウェアを使用していますか(ほぼ標準のopensshソフトウェアを使用していると想定していました)?
Ouki

質問に詳細を追加しました。
コリン・ニューウェル

7
@pdoで述べたように、 "HashKnownHosts"としてのsshdはonに設定されており、少しアナルに見えるかもしれませんが、セキュリティ上の懸念があります。そしてもちろん、ハッシュを単に逆にして、「known_hosts」からホスト名を取得する方法はありません。
Ouki

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.