SHA256 SSH-Fingerabdruck vom Client angegeben, aber nur MD5-Fingerabdruck für Server bekannt
Wenn Sie eine Verbindung zu einem neuen/unbekannten Server herstellen (mit kürzlich geöffnetem OpenSSH), zum Beispiel:
ssh example.com
Sie erhalten den Fingerabdruck wie folgt:
The authenticity of host 'example.org (192.0.2.42)' can't be established.
RSA key fingerprint is SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4.
Are you sure you want to continue connecting (yes/no)?
Normalerweise werden jedoch Fingerabdrücke für den Server in dieser Form angegeben:
f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
Wie kann ich die Authentizität überprüfen (ohne die Serveradministratoren zu veranlassen, einen SHA256-Fingerabdruck bereitzustellen)?
6 answers
Zuvor wurde der Fingerabdruck als hexed md5 Hash angegeben. Beginnend mit OpenSSH 6.8 wird der Fingerabdruck nun als base64 SHA256 angezeigt (standardmäßig). Sie können diese nicht direkt vergleichen.
Sie haben auch eine neue Konfigurationsoption FingerprintHash
hinzugefügt.
Sie können
FingerprintHash md5
In Ihrem ~/.ssh/config
auf die alte (weniger sicher) Standard zurückzukehren oder einfach nur diese Option für den einmaligen Gebrauch verwenden:
ssh -o FingerprintHash=md5 example.org
Was den Fingerabdruck als
MD5:f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
Hoffentlich server admins bieten beide Arten von Fingerabdrücken in naher Zukunft.
BEARBEITEN:
Wie in den Arch Linux Foren angegeben, gibt es auch eine dritte Option:
Host example.org
FingerprintHash md5
BEARBEITEN:
Sie können den Hash eines beliebigen Schlüssels generieren, wie im OpenSSH-Kochbuch angegeben:
Rufen Sie den Schlüssel ab:
- laden Sie den Schlüssel mit
ssh-keyscan example.org > key.pub
- oder: Suchen Sie die Schlüssel auf dem Server in
/etc/ssh
Generieren Sie die hash:
- stellen Sie sicher, dass Sie nur eine Zeile/einen Typ haben, löschen Sie also entweder alle anderen in
key.pub
oder führen Siessh-keyscan -t rsa example.org > key.pub
-
ssh-keygen -l -f key.pub
(Standard-Hash, abhängig von OpenSSH-Version) -
ssh-keygen -l -f key.pub -E md5
(md5 auf aktuelle OpenSSH) -
awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64
(sha256 auf alten OpenSSH) - (Möglicherweise müssen Sie die Zeile mit
awk '{print $3}'
für neuere Versionen von ssh-keyscan starten, da sich das Format geändert hat)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-10-31 17:29:47
Hat gerade ein kleines Bash-Skript erstellt, das eine Tabelle mit Fingerabdrücken für alle auf dem Server zulässigen Schlüsselchiffren (gemäß /etc/ssh/sshd_config
) in SSH-256
und MD5
algo druckt. Hier ist eine Beispielausgabe:
+---------+---------+-----------------------------------------------------+
| Cipher | Algo | Fingerprint |
+---------+---------+-----------------------------------------------------+
| RSA | MD5 | MD5:15:66:80:fd:79:d8:c0:92:e8:39:4a:bc:4e:c4:00:15 |
| RSA | SHA-256 | SHA256:G+rKuLGk+8Z1oxUV3cox0baNsH0qGQWm/saWPr4qZMM |
+---------+---------+-----------------------------------------------------+
| ECDSA | MD5 | MD5:f5:90:5c:03:2e:38:1b:c9:86:bd:86:47:5d:22:79:17 |
| ECDSA | SHA-256 | SHA256:GGmuOzsG4EGeRV9KD1WK7tRf3nIc40k/5jRgbTZDpTo |
+---------+---------+-----------------------------------------------------+
| ED25519 | MD5 | MD5:d1:5a:04:56:37:f4:75:19:22:e6:e5:d7:41:fd:79:fa |
| ED25519 | SHA-256 | SHA256:QVdqYeVzvsP4n5yjuN3D2fu8hDhskOxQCQAV5f9QK7w |
+---------+---------+-----------------------------------------------------+
+---[RSA 2048]----+ +---[RSA 2048]----+ +---[ECDSA 256]---+ +---[ECDSA 256]---+ +--[ED25519 256]--+ +--[ED25519 256]--+
|.oE. +.++ | | .o+= | | ... Eoo | | .. o.o.. .| | ooo++o.+*| | .o++o. +oo |
| . o +oo. | | .o= = | | +.=.=.o . | | . .o *.. ..| | . oo.+o.o=| | ...o.+ |
| + . . o.= | | ... X + | | . X.o.* | |o o ++o .. | | . o. ...+| | ..oo.o . |
| = + .+ o | | .. = + o | | + = o o | |.+ .o.o .o | | + ..o| | =oo .+ |
| o o .S . | | . .S o o | | . = S . | |... oo.S .E* * | | S ..| | .SO . . |
| + | | . E. =o.. | | o | | .. o. . o *.O o| | . | | o B .o.. |
| o | | .o. *.o. *. | | | | ... . o * * | | . | | E *..=.o|
| . | | oo=... +. | | | | +. o + o| | E| | . +.+B+|
| | |o+=.o....o+o | | | | .o+ . | | | | o.ooOX|
+------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+ +------[MD5]------+ +----[SHA256]-----+
Skript wird auch auf Servern mit SSH
Version unter 6.8
ausgeführt (bevor die Option -E md5
hinzugefügt wurde).
Bearbeiten:Aktualisierte Versionen für noch neuere Versionen von SSH, die Standard-Chiffren jetzt mit ASCII-Bildern unterstützen.
#!/bin/bash
# server_ssh_fingerprints
#
# Version 0.2
#
# 2016 Kepi <[email protected]
# MIT License
#
# Print fingerprint matrix for all allowed Host Keys
# with all allowed ciphers and MD5 and SHA-256 algos
#
# Changelog:
#
# 2018-03-11 (0.2):
# - Support for newer versions of OpenSSH
# - Added visual keys for all algos too - only in recent OpenSSH versions
# standard sshd config path
SSHD_CONFIG=/etc/ssh/sshd_config
# helper functions
function tablize {
awk '{printf(" | %-7s | %-7s | %-51s |\n", $1, $2, $3)}'
}
LINE=" +---------+---------+-----------------------------------------------------+"
# header
echo "$LINE"
echo "Cipher" "Algo" "Fingerprint" | tablize
echo "$LINE"
declare -A ALGOS
declare -a ASCII
# fingerprints
while read -r host_key; do
cipher=$(echo "$host_key" | sed -r 's/^.*ssh_host_([^_]+)_key\.pub$/\1/'| tr 'a-z' 'A-Z')
if [[ -f "$host_key" ]]; then
if ssh-keygen -E md5 -l -f "$host_key" &>/dev/null; then
IFS=$'\n'
for algo in md5 sha256; do
n=0
for line in $(ssh-keygen -E $algo -lv -f "$host_key"); do
n=$(( n + 1))
if [[ $n -eq 1 ]]; then
ALGOS[$algo]=$(echo "$line" | awk '{print $2}')
else
ASCII[$n]="${ASCII[$n]} ${line}"
fi
done
done
else
ALGOS[md5]=$(ssh-keygen -l -f "$host_key" | awk '{print $2}')
ALGOS[sha256]=$(awk '{print $2}' "$host_key" | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64)
fi
echo "$cipher" MD5 "${ALGOS[md5]}" | tablize
echo "$cipher" SHA-256 "${ALGOS[sha256]}" | tablize
echo "$LINE"
fi
done < <(awk '/^HostKey/ {sub(/^HostKey\s+/,"");print $0".pub"};' $SSHD_CONFIG)
echo
for line in "${ASCII[@]}"; do
echo "$line"
done
Dies ist nur ziemlich drucken mit informationen aus der Antwort von JonnyJD
. Danke.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-03-11 19:54:02
Es stellt sich heraus, dass ssh-keygen (irgendwann nach Version 6.6; vermutlich 6.8) eine -E md5
Option hat, die dazu führt, dass der Fingerabdruck als MD5-Fingerabdruck ausgedruckt wird. Wenn Sie also die öffentliche Schlüsseldatei des Servers unabhängig voneinander abrufen können, können Sie sie ssh-keygen -E md5 -l -f ssh_host_rsa_key.pub
und Ihren vertrauten Fingerabdruck abrufen.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-08 07:00:18
Der folgende Einzeiler funktioniert (zumindest) auf Ubuntu 16.04,18.04 / Centos >= 7
(Getestet mit Servern: openssh 3.9
- openssh 7.4
)
ssh-keygen -l -E md5 -f <(ssh-keyscan -t rsa 192.168.2.1) \
| awk '{print $2}' | cut -d":" -f 2-
Ausgabe:
# 192.168.2.1:22 SSH-2.0-OpenSSH_5.3
65:2c:c4:03:03:2f:6d:c0:c0:09:79:e7:33:c4:f1:78
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-30 09:54:10
Versucht zu ändern, um auch zufällige Kunst in die Tabelle zu bekommen:
# standard sshd config path
SSHD_CONFIG=/etc/ssh/sshd_config
# helper functions
function tablize {
awk '{printf("| %-7s | %-51s |\n", $1, $3)}'
}
LINE="+---------+-----------------------------------------------------+"
# header
echo $LINE
echo "Cipher" "Fingerprint" "Fingerprint" | tablize
echo $LINE
# fingerprints
for host_key in $(awk '/^HostKey/ {sub(/^HostKey\s+/,"");print $0".pub"};' $SSHD_CONFIG); do
cipher=$(echo $host_key | sed -r 's/^.*ssh_host_([^_]+)_key\.pub$/\1/'| tr '[a-z]' '[A-Z]')
if [[ -f "$host_key" ]]; then
md5=$(ssh-keygen -l -f $host_key -E md5 | awk '{print $2}')
sha256=$(ssh-keygen -l -f $host_key | awk '{print $2}')
art_sha256=$(ssh-keygen -lv -f $host_key | grep -v -w "256 SHA256" | grep -v -w "1024 SHA256" | grep -v -w "2048 SHA256")
art_md5=$(ssh-keygen -lv -f $host_key -E md5 | grep -v "256 MD5" | grep -v "1024 MD5" | grep -v "2048 MD5")
echo $cipher MD5 $md5 | tablize
echo $cipher SHA-256 $sha256 | tablize
echo $art_sha256 | tablize
echo $art_md5 | tablize
echo $LINE
fi
done
... aber ich bin eigentlich kein Programmierer und das Skript funktioniert nicht wie erwartet. Würde mich freuen, wenn jemand helfen kann, das Problem zu beheben (auch bereinigen). Es wäre schön, sha256 - und MD5-Zufallskunstbilder nebeneinander zu haben, um den Speicherplatz effizienter zu nutzen. Ich habe auch md5-und sha256-Befehle geändert, da die ursprünglichen für mich nicht funktionierten (wahrscheinlich zu neues System) - nur sha256 wurde am Ende mit dem Zeichen "=" in die Tabelle eingefügt, was nicht teil der tatsächlichen fingerabdruck und konnte es nicht entfernen.
(leider konnte ich nicht kommentieren, da ich mich registriert habe vor kurzem)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-07-02 23:36:50
, mochte ich Kepi Idee, aber leider geht das nicht funktioniert für mich nicht mehr so ich liest das Skript und es funktioniert, auch habe ich es vereinfacht und entfernt die ASCII-art wie ich brauchen das nicht.
Um mein Skript direkt auszuführen, führen Sie Folgendes aus:
curl -sS https://raw.githubusercontent.com/caballerofelipe/scripts/master/ssh/ssh_fingerprint.sh | bash
Hier ist mein Skript (könnte sich in Zukunft in GitHub ändern):
#!/bin/bash
# To run this file directly from a computer without downloading run this:
# curl -sS https://raw.githubusercontent.com/caballerofelipe/scripts/master/ssh/ssh_fingerprint.sh | bash
# Used to show SSH fingerprints
# Inspired by this post: http://superuser.com/a/1030779/369045
# standard sshd config path
SSH_DIR=/etc/ssh/
# Helper functions
function tablize {
printf "| %-7s | %-7s | %-47s |\n" $1 $2 $3
}
LINE="+---------+---------+-------------------------------------------------+"
# Header
echo $LINE
tablize "Cipher" "Algo" "Fingerprint"
echo $LINE
# Fingerprints
for i in $(ls $SSH_DIR/*.pub); do
md5_result=$(ssh-keygen -l -f $i -E md5)
sha256_result=$(ssh-keygen -l -f $i -E sha256)
cipher=$(echo $md5_result | sed 's/.*(//' | sed 's/)[^)]*//')
md5=$(echo $md5_result | awk '{print $2}' | sed 's/^[^:]*://g')
sha256=$(echo $sha256_result | awk '{print $2}' | sed 's/^[^:]*://g')
tablize $cipher MD5 $md5
tablize $cipher SHA-256 $sha256
echo $LINE
done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-03-14 22:00:51