Tradicionalmente, o OpenSSH exibe impressões digitais de chave (pública) usando MD5 em hexadecimal ou, opcionalmente, como 'ASCII art' ou 'bubblebabble' (uma série de quase-palavras sem sentido, mas de 5 letras pronunciáveis); 6.8 em março de 2015 adicionou opções para SHA1 e SHA256 em (PEMstyle) base64 , sendo o último o padrão e nos três casos, o nome do hash é prefixado para que você saiba qual é. ssh-keygen -l
tem -E
opção somente desde então, e o Ubuntu 14.04 data de antes de março de 2015.
Você não deve precisar de um resumo SHA1 em hexadecimal para verificar um host, já que ssh
client nunca exibe isso, apenas MD5-hex ou SHA1-base64 (não por padrão) ou SHA256-base64. Se você quiser um de qualquer maneira, você pode fazê-lo com bastante facilidade, exceto por uma chave 'rsa1' e você deve ter parado de usar o protocolo SSHv1 e, portanto, chaves rsa1 antes de Barack Obama se tornar presidente dos EUA.
Pegue o base64 'blob' de
- campo 2 de
id_$alg.pub
ou arquivo semelhante ou saída dessh-keygen -y
- campo 3 da linha no arquivo
known_hosts
, a menos que tenha um marcador, em seguida, campo 4 - campo 2 da linha no arquivo
authorized_keys
, a menos que tenha opções, em seguida, campo 3
e convertê-lo de base64 para binário, hash que, com o hash desejado e exibir na representação desejada. Como openssl
por padrão exibe hashes em hexadecimal e pode converter de (e para) base64, você poderia fazer algo como
awk '{$print $2}' id_xxx.pub | openssl base64 -d -A | openssl sha1
Observe o -A
; caso contrário, openssl silenciosamente falhará em decodificar base64 por mais tempo
de 76 caracteres e os blobs de pubkey do OpenSSH, exceto o ed25519, são mais longos.
Observe também que você pode informar a um cliente ssh
mais novo para exibir a impressão digital hexadecimal MD5 antiga com -o FingerprintHash=MD5
ou uma configuração ssh_config
equivalente.