obtenir l'empreinte digitale de la clé SSH au format (ancien) hexadécimal sur la nouvelle version de openssh


40

Il semble que openssh a changé la façon dont il affiche les empreintes digitales clés.

J'essaye de ssh d'une machine cliente à un serveur:

  • client: ubuntu 14.04 exécutant OpenSSH 6.6.1
  • serveur: FreeBSD exécutant OpenSSH 7.2p2.

Le client signale le hachage md5 de la clé du serveur comme une séquence de 16 paires de chiffres hexadécimaux, comme ceci:

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

Le serveur utilise par défaut le hachage sha256, mais grâce à cette réponse, je peux le forcer à donner le hachage sha1 en exécutant:

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

Je veux que le résultat ressemble à ceci:

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

mais à la place j'obtiens ceci:

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

Il me semble qu'une version codée en base64 de l'empreinte digitale est maintenant affichée à la place des chiffres hexadécimaux.

Comment puis-je obtenir la somme de contrôle de la clé du serveur dans le même format que celui rapporté par le client (plus ancien) (chiffres hexadécimaux séparés par deux-points, hachage sha1) afin de vérifier qu'ils sont les mêmes?

EDIT: L'ancienne version de SSH donne la somme de contrôle md5 , pas la somme de contrôle sha1 comme je le pensais à tort. L'utilisation de cette somme de contrôle (comme devrait l'indiquer la réponse maintenant acceptée) dans l'option -E donne la sortie souhaitée.

Réponses:


52

Le client signale le hachage sha1 de la clé du serveur comme une séquence de 16 paires de chiffres hexadécimaux, comme ceci:

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

Il s'agit du hachage MD5.

Comme vous pouvez le voir courir

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

vous obtiendrez la même empreinte digitale dont vous avez besoin sans un tel harakiri que vous expliquez dans votre réponse.


1
Malheureusement ça ne fonctionne pas. Ma question contient le résultat de l'exécution de votre commande suggérée. Les versions plus récentes de ssh-keygen donnent le hachage md5 comme une chaîne (encodée en base64?) Au lieu d'une chaîne hexadécimale. "All that harakiri" (une description appropriée!) Est le moyen le plus simple que j'ai pu trouver pour obtenir une chaîne hexadécimale à l'ancienne à partir de la nouvelle version des outils openssh.
stochastique

À moins que FreeBSD ne casse quelque chose (ou supprime le support MD5), il n'y a aucune raison pour que cela ne fonctionne pas. Notez que votre commande liste à tort sha1au lieu de md5! J'ai une version d'Ubuntu obsolète avec openssh-6.9, mais cela fonctionne très bien.
Jakuje

1
md5 au lieu de sha1 ... je ne sais pas comment j'ai raté ça. Cela donne en effet une sortie correspondante.
stochastique

J'ai le problème inverse. J'ai le md5 et je veux l'autre format. Comment l'obtenir?
Gabriel Staples

1
Fonctionne lorsque la commande est exécutée sur ubuntu. Ne fonctionne pas lorsque la commande est exécutée sur centos.
Marinos et

5

Il s'avère que le livre de recettes SSH a un moyen de générer manuellement des clés dans l'ancien format hexadécimal. Je l'ai utilisé sur le serveur freebsd.

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

Décomposer cela:

awk '{print $ 2}' key.pub

imprimer la deuxième colonne (séparée par des espaces) dans "key.pub", qui est la clé elle-même

base64 -d

la clé est codée en base64. Cela produira les octets réels de la clé

md5

c'est l'équivalent de freebsd du 'md5sum -b' qui a été spécifié dans la recette sur la page du livre de cuisine ssh

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

Il existe deux commandes sed ici:

s /../&:/ g;

remplacer chaque paire de caractères de la ligne (grâce au drapeau 'g' à la fin) par cette même paire suivie de deux points

s /:. * $ // '

supprimer les deux-points de fin (remplacer un deux-points suivi d'un espace suivi de quoi que ce soit jusqu'à la fin de la ligne avec rien).


4

Dans des cas comme celui-ci, j'utilise le petit script suivant (testé sur Debian et 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

Exemple d'utilisation:

$ 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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.