Как расшифровать имена хостов зашифрованных .ssh / known_hosts со списком имен хостов?


14

Я пытаюсь найти скрипт для дешифрования (unhash) имен хостов ssh в файле known_hosts , передавая список хост-хостов .

Итак, чтобы сделать в точности наоборот :

ssh-keygen -H -f known_hosts

Или также, чтобы сделать то же самое, если ssh config HashKnownHosts установлен в No:

ssh-keygen -R know-host.com -f known_hosts
ssh-keyscan -H know-host.com >> known_hosts

Но без повторной загрузки ключа хоста (вызвано ssh-keyscan).

Что-то вроде:

ssh-keygen --decrypt -f known_hosts --hostnames hostnames.txt

Где hostnames.txt содержит список имен хостов.


Имена хостов являются частью записей в known_hosts. Что расшифровывать?
Муру

1
Я имею в виду зашифрованный файл known_hosts. Где ssh config HashKnownHosts находится в Да. Я изменил название.
Xorax

Ответы:


22

Строки в known_hostsфайле не шифруются, они хешируются. Вы не можете расшифровать их, потому что они не зашифрованы. Вы не можете «разархивировать» их, потому что в этом весь хэш - учитывая, что это невозможно, - обнаружить исходную строку. Единственный способ «разомкнуть» - угадать исходную строку и проверить правильность вашего предположения.

Если у вас есть список имен хостов, вы можете передать их ssh-keygen -Fи заменить на имя хоста.

while read host comment; do
  found=$(ssh-keygen -F "$host" | grep -v '^#' | sed "s/^[^ ]*/$host/")
  if [ -n "$found" ]; then
    ssh-keygen -R "$host"
    echo "$found" >>~/.ssh/known_hosts
  fi
done <hostnames.txt

¹ В практическом смысле, т. Е. Все компьютеры, существующие сегодня, потребуют больше времени, чем нынешний век вселенной, чтобы сделать это.


13

Справочная страница ssh-keygen (1) говорит об этом -F hostname:

Найдите указанное имя хоста в файле known_hosts, перечислив найденные случаи. Эта опция полезна для поиска имен или адресов хэшированных хостов, а также может использоваться вместе с -Hопцией печати найденных ключей в хешированном формате.

Кажется, это то, что вы хотите.


Это возвращает строку с хэшированным именем хоста. Я хочу, чтобы заменить его в файле known_hosts. Требуется скрипт для анализа каждой строки, снятия хэша и его замены в файле known_hosts.
Xorax

2
@Xorax Да, но с помощью этой команды вы можете получить хешированное имя хоста и заменить его в known_hostsфайле на sed.
vinc17
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.