Можно ли узнать хосты в файле known_hosts?

115

Я хотел бы видеть, какие хосты есть в моем файле known_hosts, но он не кажется читаемым человеком. Можно ли это прочитать?

Более конкретно, есть хост, к которому я могу подключиться через несколько имен, и я хочу узнать, какой отпечаток я ожидаю от него из моего известного файла hosts.

Обновление: я использую OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 марта 2009 г.

Строка из моего файла 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/…
Бенджамин

Ответы:

135

В вашем файле HashKnownHostsустановлено значение " yes" ssh_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
Значит ли хэш известных хостов, по сути, означает, что это невозможно? т.е. мне нужно знать имя хоста, чтобы посмотреть его информацию?
Колин Ньюэлл
7
@ColinNewell Правильно, вам нужно знать имена хостов. Это мера безопасности, которая не позволяет злоумышленнику собирать имена хостов / IP-адреса других ящиков, которые вы часто используете, если ваша машина взломана.
pdo
1
Не пугайтесь, когда вообще ничего не выводится, но вместо этого попробуйте не полное имя хоста, а имя хоста.
математика
6
Не sshd_config, но ssh_config.
Fish Monitor
9
@pdo - ваша команда не всегда работает. Если хост имеет SSH на порте, отличном от 22, то формат в known_hostsотличается. Затем вы должны использовать следующую команду: ssh-keygen -H -F [host.example.com]:2222
Мартин Вегтер
17

Для будущих пользователей эта статья (без оговорок: я не аффилирован) содержит сравнительно простой Perl-скрипт для хэшированных IP-адресов и имен хостов known_hosts.

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

Это позволяет начать с определенного IP-адреса. Он также может быть легко изменен для использования словаря.

Кроме того, в июне 2014 года в проекте John the Ripper была добавлена ​​поддержка взлома known_hosts , который может использовать преимущества нескольких ядер ЦП, графических процессоров, перебора словаря и т. Д.

Вы также можете использовать этот фрагмент nmap для создания словаря всех IP-адресов RFC1918 для использования в качестве словаря:

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
Ларс Нордин,
Ларс Нордин, спасибо за совет. Я отправил информацию Ремили в команду Джона Потрошителя, и они добавили поддержку для этого в bleeding-jumbo: openwall.com/lists/john-users/2014/07/02/2
Ройс Уильямс
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     |
|        . .      |
+-----------------+
Sr-
источник
2
Не в самом строгом смысле, нет, это все еще base64. Объяснение pdo о хешировании предполагает, что это односторонняя вещь, поэтому я думаю, что застряну, если не знаю имя хоста.
Колин Ньюэлл
Это помогло мне. Что я конкретно хотел, так это сочетание. Чтобы найти ранее проверенный ssh-отпечаток, вы можете запустить:ssh-keygen -l -f ~/.ssh/known_hosts -F <hostname>
isaaclw
ну, ssh-keygen -l -F <hostname>еще
проще
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 [...] ==
Ouki
источник
2
... и таким образом awk '{print $1}' known_hostsделает трюк. Имейте в виду, что серверы, прослушивающие нестандартные порты, в конечном итоге, скажем, [some-server]:5555в known_hosts.
sr_
3
К сожалению не по моему. Мой больше похож на данные, закодированные в base64. Данные также разделены по трубе в моем файле.
Колин Ньюэлл
Какое программное обеспечение ssh вы используете тогда (мы предполагали, что вы использовали почти стандартное программное обеспечение openssh)?
Ouki
Я добавил больше деталей к моему вопросу.
Колин Ньюэлл
7
Как утверждает @pdo, ваш sshd как "HashKnownHosts" включен, что может показаться немного анальным, но это касается безопасности. И, конечно, нет способа просто поменять хеши и получить имена хостов от ваших "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
хп.
источник