Como descriptografar nomes de host de um .ssh / known_hosts criptografado com uma lista dos nomes de host?

12

Eu tento encontrar um script para descriptografar (unhash) os nomes de host ssh no arquivo known_hosts passando uma lista dos hostnamses .

Então, para fazer exatamente o contrário de :

ssh-keygen -H -f known_hosts

Ou também, para fazer o mesmo que isso se a configuração do ssh HashKnownHosts estiver definida como Não:

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

Mas sem baixar novamente a chave do host (causada por ssh-keyscan).

Algo como:

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

Onde hostnames.txt contém uma lista de nomes de host.

    
por Xorax 19.12.2014 / 19:19

2 respostas

19

As linhas no arquivo known_hosts não são criptografadas, elas são criptografadas. Você não pode descriptografá-los, porque eles não são criptografados. Você não pode "desenterrá-los", porque o que é um hash - dado o hash, é impossível descobrir a string original. A única maneira de "desvendar" é adivinhar a string original e verificar sua suposição.

Se você tiver uma lista de nomes de host, poderá transmiti-los para ssh-keygen -F e substituí-los pelo nome do 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

¹ Em um sentido prático, isto é, seria necessário que todos os computadores existentes hoje tivessem mais tempo do que a idade atual do universo para fazê-lo.

    
por 20.12.2014 / 23:52
10

A página do manual ssh-keygen (1) diz para a opção -F hostname :

Search for the specified hostname in a known_hosts file, listing any occurrences found. This option is useful to find hashed host names or addresses and may also be used in conjunction with the -H option to print found keys in a hashed format.

Isso parece ser o que você quer.

    
por 19.12.2014 / 19:27