Wie entschlüsselt man Hostnamen eines verschlüsselten .ssh / known_hosts mit einer Liste der Hostnamen?

14

Ich versuche ein Skript zu finden, um die ssh-Hostnamen in der Datei known_hosts zu entschlüsseln ( zu entschlüsseln ), indem ich eine Liste der Hostnamen übergebe .

Um genau das Gegenteil von :

ssh-keygen -H -f known_hosts

Oder machen Sie dasselbe, wenn die ssh config HashKnownHosts auf No gesetzt ist:

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

Aber ohne den Host-Schlüssel erneut herunterzuladen (verursacht durch ssh-keyscan).

Etwas wie:

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

Wobei hostnames.txt eine Liste von Hostnamen enthält.

Xorax
quelle
Die Hostnamen sind Teil der Einträge in known_hosts. Was ist zu entschlüsseln?
muru
1
Ich meine für eine verschlüsselte known_hosts-Datei. Wobei die ssh config HashKnownHosts auf Ja steht. Ich habe den Titel geändert.
Xorax

Antworten:

22

Zeilen in der known_hostsDatei werden nicht verschlüsselt, sondern gehasht. Sie können sie nicht entschlüsseln, da sie nicht verschlüsselt sind. Sie können sie nicht "enthüllen", weil das, worum es bei einem Hash geht, angesichts des Hashs unmöglich ist, die ursprüngliche Zeichenfolge zu entdecken. Die einzige Möglichkeit zum "Aufheben" besteht darin, die ursprüngliche Zeichenfolge zu erraten und Ihre Vermutung zu bestätigen.

Wenn Sie über eine Liste von Hostnamen verfügen, können Sie diese weitergeben ssh-keygen -Fund durch den Hostnamen ersetzen.

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

¹ Im praktischen Sinne, dh es würde alle Computer, die heute existieren, länger als das gegenwärtige Zeitalter des Universums brauchen, um dies zu tun.

Gilles 'SO - hör auf böse zu sein'
quelle
13

In der Manpage von ssh-keygen (1) steht für die -F hostnameOption:

Suchen Sie in einer Datei known_hosts nach dem angegebenen Hostnamen und listen Sie alle gefundenen Vorkommen auf. Diese Option ist nützlich, um gehashte Hostnamen oder -adressen zu finden. Sie kann auch in Verbindung mit der -HOption zum Drucken gefundener Schlüssel in einem gehashten Format verwendet werden.

Das scheint das zu sein, was du willst.

vinc17
quelle
Dies gibt die Zeile mit dem gehashten Hostnamen zurück. Ich möchte es entpacken, um es in der Datei known_hosts zu ersetzen. Es wird ein Skript benötigt, um jede Zeile zu analysieren, den Hash zu entfernen und sie dann in der Datei known_hosts zu ersetzen.
Xorax
2
@Xorax Ja, aber mit diesem Befehl können Sie den gehashten Hostnamen abrufen und in der known_hostsDatei durch ersetzen sed.
Vinc17