Как расшифровать имена хостов зашифрованных .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 содержит список имен хостов.

Xorax
источник
Имена хостов являются частью записей в 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опцией печати найденных ключей в хешированном формате.

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

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