Come decodificare i nomi host di un .ssh / known_hosts criptato con un elenco dei nomi host?


14

Provo a trovare uno script per decrittografare (unhash) i nomi host ssh nel file known_hosts passando un elenco dei nomi host .

Quindi, per fare esattamente il contrario di :

ssh-keygen -H -f known_hosts

O anche, per fare lo stesso di questo se la configurazione di ssh HashKnownHosts è impostata su No:

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

Ma senza scaricare nuovamente la chiave host (causata da ssh-keyscan).

Qualcosa di simile a:

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

Dove hostnames.txt contiene un elenco di nomi host.


I nomi host fanno parte delle voci in known_hosts. Cosa decifrare?
Muru,

1
Voglio dire per un file known_hosts criptato. Dove la configurazione ssh HashKnownHosts è Sì. Ho modificato il titolo.
Xorax,

Risposte:


22

Le righe nel known_hostsfile non sono crittografate, ma sono cancellate. Non puoi decrittografarli, perché non sono crittografati. Non puoi "infastidirli", perché quello di cui tratta un hash - dato l'hash, è impossibile¹ scoprire la stringa originale. L'unico modo per "unhash" è indovinare la stringa originale e verificare la tua ipotesi.

Se si dispone di un elenco di nomi host, è possibile passarli a ssh-keygen -Fe sostituirli con il nome host.

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

¹ In senso pratico, cioè ci vorrebbe tutti i computer esistenti oggi più a lungo dell'era attuale dell'universo per farlo.


13

La pagina man ssh-keygen (1) dice per l' -F hostnameopzione:

Cerca il nome host specificato in un file known_hosts, elencando tutte le occorrenze trovate. Questa opzione è utile per trovare nomi host o indirizzi con hash e può anche essere utilizzata insieme -Hall'opzione per stampare le chiavi trovate in un formato con hash.

Questo sembra essere quello che vuoi.


Ciò restituisce la riga con il nome host con hash. Voglio cancellarlo per sostituirlo nel file known_hosts. Ha bisogno di uno script per analizzare ogni riga, cancellarla e quindi sostituirla nel file known_hosts.
Xorax,

2
@Xorax Sì, ma con questo comando è possibile recuperare il nome host con hash e sostituirlo con il known_hostsfile sed.
vinc17
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.