Comment décrypter les noms d'hôtes d'un .ssh / connu_hôtes cryptés avec une liste des noms d'hôtes?

14

J'essaie de trouver un script pour décrypter (hacher) les noms d'hôte ssh dans le fichier known_hosts en passant une liste des noms d'hôte .

Donc, pour faire exactement l'inverse de :

ssh-keygen -H -f known_hosts

Ou aussi, pour faire la même chose si la configuration ssh HashKnownHosts est définie sur No:

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

Mais sans retélécharger la clé d'hôte (causée par ssh-keyscan).

Quelque chose comme:

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

Où hostnames.txt contient une liste de noms d'hôtes.

Xorax
la source
Les noms d'hôtes font partie des entrées de known_hosts. Que déchiffrer?
muru
1
Je veux dire pour un fichier d'hôtes_cryptés crypté. Où la configuration ssh HashKnownHosts est sur Oui. J'ai modifié le titre.
Xorax

Réponses:

22

Les lignes du known_hostsfichier ne sont pas chiffrées, elles sont hachées. Vous ne pouvez pas les déchiffrer, car ils ne sont pas chiffrés. Vous ne pouvez pas les "déchaîner", car c'est à cela que sert un hachage - étant donné le hachage, il est impossible¹ de découvrir la chaîne d'origine. La seule façon de «détacher» est de deviner la chaîne d'origine et de vérifier votre supposition.

Si vous avez une liste de noms d'hôte, vous pouvez les transmettre ssh-keygen -Fet les remplacer par le nom d'hôte.

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

¹ Dans un sens pratique, c'est-à-dire qu'il faudrait à tous les ordinateurs existants aujourd'hui plus longtemps que l'âge actuel de l'univers pour le faire.

Gilles 'SO- arrête d'être méchant'
la source
13

La page de manuel ssh-keygen (1) indique pour l' -F hostnameoption:

Recherchez le nom d'hôte spécifié dans un fichier connu_hôtes, répertoriant toutes les occurrences trouvées. Cette option est utile pour rechercher des noms d'hôtes ou des adresses hachées et peut également être utilisée conjointement avec l' -Hoption pour imprimer les clés trouvées dans un format haché.

Cela semble être ce que vous voulez.

vinc17
la source
Cela renvoie la ligne avec le nom d'hôte haché. Je veux le détacher pour le remplacer dans le fichier known_hosts. Il a besoin d'un script pour analyser chaque ligne, la détacher, puis la remplacer dans le fichier known_hosts.
Xorax
2
@Xorax Oui, mais avec cette commande, vous pouvez récupérer le nom d'hôte haché et le remplacer dans le known_hostsfichier par sed.
vinc17