Holen Sie sich den Fingerabdruck des SSH-Schlüssels im (alten) Hex-Format in der neuen Version von openssh

40

Es scheint, dass openssh die Art und Weise geändert hat, wie wichtige Fingerabdrücke angezeigt werden.

Ich versuche, von einem Client-Computer auf einen Server zu ssh:

  • client: ubuntu 14.04 mit OpenSSH 6.6.1
  • Server: FreeBSD mit OpenSSH 7.2p2.

Der Client meldet den md5-Hash des Serverschlüssels als eine Folge von 16 hexadezimalen Ziffernpaaren wie folgt:

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

Der Server verwendet standardmäßig den sha256-Hash, aber dank dieser Antwort kann ich ihn zwingen, den sha1-Hash zu geben, indem ich Folgendes ausführe:

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

Ich möchte, dass das Ergebnis so aussieht:

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

aber stattdessen bekomme ich das:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI [email protected] (ECDSA)

Für mich sieht es so aus, als würde jetzt eine Base64-codierte Version des Fingerabdrucks anstelle von Hex-Ziffern angezeigt.

Wie kann ich die vom (älteren) Client gemeldete Prüfsumme des Serverschlüssels im selben Format erhalten (durch Doppelpunkte getrennte Hex-Ziffern, sha1-Hash), um zu überprüfen, ob sie gleich sind?

BEARBEITEN: Die alte Version von SSH gibt die MD5- Prüfsumme, nicht die SHA1-Prüfsumme, wie ich fälschlicherweise dachte. Die Verwendung dieser Prüfsumme (wie in der jetzt akzeptierten Antwort angegeben) in der Option -E ergibt die gewünschte Ausgabe.

stochastisch
quelle

Antworten:

52

Der Client meldet den sha1-Hash des Serverschlüssels als eine Folge von 16 hexadezimalen Ziffernpaaren wie folgt:

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

Dies ist MD5-Hash.

Wie Sie sehen können, läuft

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

Erhältst du den gleichen Fingerabdruck, den du brauchst, ohne einen solchen Harakiri, den du in deiner Antwort erklärst.

Jakuje
quelle
1
Das geht leider nicht. Meine Frage enthält das Ergebnis der Ausführung Ihres vorgeschlagenen Befehls. Neuere Versionen von ssh-keygen geben den md5-Hash als (base64-codierten?) String anstelle eines Hex-Strings an. "All das Harakiri" (eine passende Beschreibung!) Ist der einfachste Weg, einen Hex-String alten Stils aus der neuen Version von openssh tools zu bekommen.
Stochastic
Solange FreeBSD nichts kaputt macht (oder die MD5-Unterstützung entfernt), gibt es keinen Grund, warum es nicht funktionieren sollte. Beachten Sie, dass Ihr Befehl sha1statt falsch aufgelistet ist md5! Ich habe Ubuntu-Version mit openssh-6.9 veraltet, aber es funktioniert einwandfrei.
Jakuje
1
md5 statt sha1 ... nicht sicher, wie ich das verpasst habe. Das ergibt in der Tat eine passende Ausgabe.
Stochastic
Ich habe das gegenteilige Problem. Ich habe die md5 und möchte das andere format. Wie bekomme ich es?
Gabriel Staples
1
Funktioniert, wenn der Befehl auf Ubuntu ausgeführt wird. Funktioniert nicht, wenn der Befehl auf Centos ausgeführt wird.
Marinos An
5

Wie sich herausstellt, kann das SSH-Kochbuch manuell Schlüssel im älteren Hex-Format generieren. Ich habe dies auf dem Freebsd-Server verwendet.

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

Aufschlüsselung:

awk '{print $ 2}' key.pub

Drucken Sie die zweite (durch Leerzeichen getrennte) Spalte in "key.pub" aus, bei der es sich um den eigentlichen Schlüssel handelt

base64 -d

Der Schlüssel ist Base64-codiert. Dies gibt die tatsächlichen Bytes des Schlüssels aus

md5

Dies ist freebsds Äquivalent zu 'md5sum -b', das im Rezept auf der ssh-Kochbuchseite angegeben wurde

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

Hier gibt es zwei sed-Befehle:

s /../&:/ g;

Ersetzen Sie jedes Zeichenpaar in der Zeile (dank der Markierung 'g' am Ende) durch dasselbe Paar, gefolgt von einem Doppelpunkt

s /:. * $ // '

Entfernen Sie alle nachfolgenden Doppelpunkte (ersetzen Sie einen Doppelpunkt, gefolgt von einem Leerzeichen, gefolgt von etwas bis zum Ende der Zeile, mit nichts).

stochastisch
quelle
4

In solchen Fällen verwende ich das folgende kleine Skript (getestet auf Debian und 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

Anwendungsbeispiel:

$ 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
rpr
quelle