%20Hex-Format%20auf%20der%20neuen%20Version%20von%20OpenSSH.png)
Es scheint, dass OpenSSH die Art und Weise geändert hat, wie es Schlüsselfingerabdrücke anzeigt.
Ich versuche, von einem Client-Rechner per SSH auf einen Server zuzugreifen:
- 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 Folge von 16 Paaren hexadezimaler Ziffern, 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 dankdiese AntwortIch kann es zwingen, den SHA1-Hash auszugeben, indem ich Folgendes ausführe:
[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub
Das Ergebnis soll so aussehen:
a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a
aber stattdessen bekomme ich Folgendes:
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 Prüfsumme des Serverschlüssels im gleichen Format wie das vom (älteren) Client gemeldete (durch Doppelpunkte getrennte Hex-Ziffern, SHA1-Hash) erhalten, um zu überprüfen, ob sie identisch sind?
BEARBEITEN: Die alte Version von SSH bietet diemd5Prüfsumme,nichtdie SHA1-Prüfsumme, wie ich fälschlicherweise dachte. Die Verwendung dieser Prüfsumme (wie die jetzt akzeptierte Antwort lauten sollte) in der Option -E führt zur gewünschten Ausgabe.
Antwort1
Der Client meldet den SHA1-Hash des Serverschlüssels als Folge von 16 Paaren hexadezimaler Ziffern, wie folgt:
a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a
Dies ist ein MD5-Hash.
Wie Sie sehen können, läuft
ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub
erhalten Sie denselben Fingerabdruck, den Sie benötigen, ohne das Harakiri, das Sie in Ihrer Antwort erklären.
Antwort2
In solchen Fällen verwende ich das folgende kleine Skript (getestet unter 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
Antwort3
Wie sich herausstellt,SSH-Kochbuchbietet eine Möglichkeit, Schlüssel im älteren Hex-Format manuell zu generieren. Ich habe dies auf dem FreeBSD-Server verwendet.
awk '{print $2}' key.pub | base64 -d | md5 | sed 's/../&:/g; s/: .*$//'
Im Einzelnen:
awk '{print $2}' Schlüssel.pub
Drucken Sie die zweite (durch Leerzeichen getrennte) Spalte in „key.pub“ aus, die den Schlüssel selbst darstellt
base64 -d
der Schlüssel ist base64-kodiert. Dadurch werden die tatsächlichen Bytes des Schlüssels ausgegeben
md5
Dies ist das FreeBSD-Ä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 Flagge „g“ am Ende) durch dasselbe Paar, gefolgt von einem Doppelpunkt
s/: .*$//'
Entfernen Sie alle abschließenden Doppelpunkte (ersetzen Sie einen Doppelpunkt, gefolgt von einem Leerzeichen und anschließend irgendetwas bis zum Zeilenende durch nichts).
Antwort4
Für zu ssh-agent hinzugefügte Schlüssel listet dieser Befehl ihre MD5-Fingerabdrücke öffentlicher Schlüssel auf:
ssh-add -l -E md5
Um MD5-Fingerabdrücke für alle öffentlichen Schlüssel in einem Verzeichnis auszudrucken, verwenden Sie Folgendes:
find ~/.ssh/ -name *.pub -printf '%f\t' -exec ssh-keygen -l -E md5 -f {} \;
Dabei wird auch der Dateiname ausgedruckt, um die Identifizierung zu erleichtern.