obtenha a impressão digital da chave SSH no formato hexadecimal (antigo) na nova versão do openssh


40

Parece que o openssh mudou a maneira como exibe as principais impressões digitais.

Estou tentando ssh de uma máquina cliente para um servidor:

  • cliente: ubuntu 14.04 executando o OpenSSH 6.6.1
  • servidor: FreeBSD executando o OpenSSH 7.2p2.

O cliente relata o hash md5 da chave do servidor como uma sequência de 16 pares de dígitos hexadecimais, assim:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

O servidor usa como padrão o hash sha256, mas, graças a esta resposta , posso forçá-lo a fornecer o hash sha1 executando:

[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub

Quero que o resultado fique assim:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

mas, em vez disso, recebo isso:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI root@host.local (ECDSA)

Parece-me que agora está sendo exibida uma versão codificada em base64 da impressão digital em vez de dígitos hexadecimais.

Como posso obter a soma de verificação da chave do servidor no mesmo formato que o relatado pelo cliente (mais antigo) (dígitos hexadecimais separados por dois pontos, hash sha1) para verificar se são iguais?

EDIT: A versão antiga do SSH fornece a soma de verificação md5 , e não a soma de verificação sha1, como pensei por engano. O uso dessa soma de verificação (como a resposta agora aceita deve indicar) na opção -E fornece a saída desejada.

Respostas:


52

O cliente relata o hash sha1 da chave do servidor como uma sequência de 16 pares de dígitos hexadecimais, assim:

    a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

Este é o hash MD5.

Como você pode ver executando

ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub

você obterá a mesma impressão digital que você precisa sem os harakiri que você está explicando na sua resposta.


1
Infelizmente, isso não funciona. Minha pergunta contém o resultado da execução do seu comando sugerido. As versões mais recentes do ssh-keygen fornecem o hash md5 como uma string (codificada em base64?) Em vez de uma string hexadecimal. "Todo esse harakiri" (uma descrição apropriada!) É a maneira mais fácil de encontrar uma string hexadecimal da nova versão das ferramentas openssh.
stochastic

A menos que o FreeBSD quebre algo (ou remova o suporte ao MD5), não há razão para que ele não funcione. Observe que seu comando lista incorretamente em sha1vez de md5! Eu desatualizei a versão do Ubuntu com o openssh-6.9, mas funciona muito bem.
Jakuje 12/06

1
MD5 em vez de sha1 ... não sei como eu perdi isso. Isso de fato gera resultados correspondentes.
estocástica

Eu tenho o problema oposto. Eu tenho o MD5 e quero o outro formato. Como faço para obtê-lo?
Gabriel Staples

1
Funciona quando o comando é executado no ubuntu. Não funciona quando o comando é executado no centos.
Marinos Um 12/12

5

Como se vê, o SSH Cookbook tem uma maneira de gerar manualmente chaves no formato hexadecimal mais antigo. Eu usei isso no servidor freebsd.

awk '{print $ 2}' key.pub | base64 -d | MD5 s /../&:/ g de sed; s /:. * $ // '

Quebrando isso:

awk '{print $ 2}' key.pub

imprima a segunda coluna (separada por espaço) em "key.pub", que é a própria chave

base64 -d

a chave é codificada em base64. Isso produzirá os bytes reais da chave

md5

isso é o equivalente do freebsd ao 'md5sum -b' especificado na receita na página do livro de receitas ssh

s /../&:/ g de sed; s /:. * $ // '

Existem dois comandos sed aqui:

s /../&:/ g;

substitua cada par de caracteres na linha (graças à bandeira 'g' no final) pelo mesmo par seguido por dois pontos

s /:. * $ // '

remova os dois pontos à direita (substitua dois pontos seguidos por um espaço seguido por qualquer coisa até o final da linha por nada).


4

Em casos como este, uso o seguinte pequeno script (testado no Debian e Ubuntu):

#!/bin/sh

# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)

if [ "$#" != 2 ]; then
  echo "usage: $0 hostname checksum_command"
  exit 1
fi

ssh-keyscan $1 2>/dev/null | while read -r line; do
  echo "Scanned key:"
  echo $line
  echo "$2 fingerprint:"
  echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
  echo
done

Exemplo de uso:

$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79

Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83

$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18

Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.