¿Cómo descifrar los nombres de host de un .ssh / known_hosts cifrado con una lista de los nombres de host?

14

Intento encontrar un script para descifrar (deshacer) los nombres de host ssh en el archivo known_hosts pasando una lista de hostnamses .

Entonces, hacer exactamente lo contrario de :

ssh-keygen -H -f known_hosts

O también, para hacer lo mismo si la configuración ssh HashKnownHosts está establecida en No:

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

Pero sin volver a descargar la clave de host (causada por ssh-keyscan).

Algo como:

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

Donde hostnames.txt contiene una lista de nombres de host.

Xorax
fuente
Los nombres de host son parte de las entradas en known_hosts. ¿Qué hay que descifrar?
muru
1
Quiero decir para un archivo encriptado conocido_hosts. Donde la configuración ssh HashKnownHosts es Sí. Modifiqué el título.
Xorax

Respuestas:

22

Las líneas en el known_hostsarchivo no están encriptadas, están en hash. No puede descifrarlos, porque no están cifrados. No puedes "deshacerlos", porque de eso se trata un hash : dado el hash, es imposible¹ descubrir la cadena original. La única forma de "deshacer" es adivinar la cadena original y verificar su suposición.

Si tiene una lista de nombres de host, puede pasarlos ssh-keygen -Fy reemplazarlos por el nombre de 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

¹ En un sentido práctico, es decir, tomaría todas las computadoras existentes hoy más tiempo que la edad actual del universo para hacerlo.

Gilles 'SO- deja de ser malvado'
fuente
13

La página del comando man ssh-keygen (1) dice para la -F hostnameopción:

Busque el nombre de host especificado en un archivo conocido_hosts, enumerando cualquier ocurrencia encontrada. Esta opción es útil para buscar nombres de host o direcciones hash y también se puede usar junto con la -Hopción de imprimir las claves encontradas en un formato hash.

Esto parece ser lo que quieres.

vinc17
fuente
Esto devuelve la línea con el nombre de host hash. Quiero deshacerlo para reemplazarlo en el archivo known_hosts. Necesita un script para analizar cada línea, quitar el hash y luego reemplazarlo en el archivo known_hosts.
Xorax
2
@Xorax Sí, pero con este comando, puede recuperar el nombre de host hash y reemplazarlo en el known_hostsarchivo con sed.
vinc17