Як розшифрувати імена хостів зашифрованого .ssh / known_hosts зі списком імен хостів?


14

Я намагаюся знайти сценарій для розшифрування (видалення) ssh імен хостів у файлі known_hosts , передавши список хостів .

Отже, робити саме зворотне :

ssh-keygen -H -f known_hosts

Або також зробити те ж саме, що якщо для ssh config HashKknownHosts встановлено значення Ні:

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

Де імена хостів.txt містить список імен хостів.


Імена хостів є частиною записів у known_hosts. Що розшифрувати?
муру

2
Я маю на увазі для зашифрованого файла відомого_госту. Де ssh config HashKknownHosts - це Так. Я змінив заголовок.
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

Сторінка man-ssh-keygen (1) пропонує -F hostnameваріант:

Шукайте вказане ім'я хоста у відомому файлі_hosts, перераховуючи знайдені події. Цей параметр корисний для пошуку хешованих імен хостів або адрес, а також може використовуватися разом із -Hможливістю друку знайдених ключів у хешованому форматі.

Це здається, що ви хочете.


Це поверне рядок із хешованим іменем хоста. Я хочу видалити його, щоб замінити його у відомому файлі_hosts. Потрібен сценарій, щоб проаналізувати кожен рядок, скасувати його, а потім замінити його у відомому файлі_hosts.
Xorax

2
@Xorax Так, але за допомогою цієї команди ви можете отримати хешоване ім'я хоста та замінити його у known_hostsфайлі на sed.
vinc17
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.