Lors de la connexion à un serveur nouveau / inconnu (avec OpenSSH récent), par exemple:
ssh example.com
Vous obtenez l'empreinte digitale comme ci-dessous:
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)?
Cependant, les empreintes digitales sont généralement données pour le serveur sous cette forme:
f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
Comment puis-je vérifier l'authenticité (sans écraser les administrateurs du serveur pour fournir une empreinte digitale SHA256)?
Auparavant, l'empreinte digitale était donnée comme un haché md5 hexadécimal. À partir d' OpenSSH 6.8, l'empreinte digitale est maintenant affichée comme base64 SHA256 (par défaut). Vous ne pouvez pas les comparer directement.
Ils ont également ajouté une nouvelle option de configuration FingerprintHash
. Tu peux mettre
FingerprintHash md5
Dans votre ~/.ssh/config
pour revenir à l'ancien ( moins sécurisé ) par défaut ou utilisez cette option pour une seule utilisation:
ssh -o FingerprintHash=md5 example.org
Qui donnerait l'empreinte digitale comme
MD5:f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5
J'espère que les administrateurs de serveurs fournissent les deux types d'empreintes digitales dans un proche avenir.
MODIFIER:
Comme indiqué dans les forums Arch Linux , il existe également une troisième option:
Host example.org FingerprintHash md5
MODIFIER:
Vous pouvez générer le hash d'une clé arbitraire comme indiqué sur OpenSSH Cookbook :
Récupérer la clé:
ssh-keyscan example.org > key.pub
/etc/ssh
Générer le hash:
key.pub
ou exécuter ssh-keyscan -t rsa example.org > key.pub
ssh-keygen -l -f key.pub
(hachage par défaut, selon la version OpenSSH) ssh-keygen -l -f key.pub -E md5
(md5 sur OpenSSH actuel) awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64
awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64
(sha256 sur l'ancienne OpenSSH) awk '{print $3}'
pour les versions plus récentes de ssh-keyscan car le format a changé) Il suffit de créer un petit script bash qui imprimera le tableau avec des empreintes digitales pour tous les chiffres clés autorisés sur le serveur (selon /etc/ssh/sshd_config
) dans les deux SSH-256
et MD5
algo. Voici un exemple:
+---------+---------+-------------------------------------------------+ | Cipher | Algo | Fingerprint | +---------+---------+-------------------------------------------------+ | RSA | MD5 | 05:3e:10:b2:b3:69:aa:3b:8e:da:97:6f:25:3b:b5:d5 | | RSA | SHA-256 | brIUrrA7NBvvxL5sEVaxVWc3JsYrq1K7OlUCDYhbbOg= | +---------+---------+-------------------------------------------------+ | ECDSA | MD5 | c4:59:67:5e:28:9f:cb:02:be:8f:57:2a:24:eb:c6:12 | | ECDSA | SHA-256 | 9sUOJTNe6X/GI4L6DcITb41STfqok8wJ2N+hUxAolNc= | +---------+---------+-------------------------------------------------+ | ED25519 | MD5 | 32:43:e1:0f:3e:60:2a:72:28:28:92:3d:0f:31:f2:69 | | ED25519 | SHA-256 | US5jTUa0kgX5ZxdqaGF0yGRu8EgKXHNmoT8jHKo1StM= | +---------+---------+-------------------------------------------------+
Le script fonctionnera également sur les serveurs avec la version SSH
ci-dessous 6.8
(avant que l'option -E md5
été ajoutée).
#!/bin/bash # standard sshd config path SSHD_CONFIG=/etc/ssh/sshd_config # helper functions function tablize { awk '{printf("| %-7s | %-7s | %-47s |\n", $1, $2, $3)}' } LINE="+---------+---------+-------------------------------------------------+" # header echo $LINE echo "Cipher" "Algo" "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 '[az]' '[AZ]') if [[ -f "$host_key" ]]; then md5=$(ssh-keygen -l -f $host_key | awk '{print $2}') sha256=$(awk '{print $2}' $host_key | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64) echo $cipher MD5 $md5 | tablize echo $cipher SHA-256 $sha256 | tablize echo $LINE fi done
Ceci est juste une copie très simple en utilisant des informations issues de la JonnyJD
de JonnyJD
. Merci.
Il s'avère que ssh-keygen (quelque temps après la version 6.6; vraisemblablement 6.8) a une option -E md5
qui lui permettra d'imprimer l'empreinte digitale comme empreinte digitale md5. Donc, si vous pouvez saisir de manière indépendante le fichier de clé publique du serveur, vous pouvez l'alimenter vers ssh-keygen -E md5 -l -f ssh_host_rsa_key.pub
et obtenir votre empreinte digitale familière.
Essayé de modifier pour obtenir aussi l'art aléatoire en table:
# 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 '[az]' '[AZ]') 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
… mais je ne suis pas vraiment un programmeur et le script ne fonctionne pas comme prévu. J'apprécierais si quelqu'un peut aider à réparer (aussi le nettoyage). Il serait bon d'avoir des images artistiques aléatoires sha256 et md5 côte à côte pour utiliser l'espace de manière plus efficace. J'ai également modifié les commandes md5 et sha256 car les original ne fonctionnaient pas pour moi (probablement un système trop nouveau) – seulement sha256 apprété dans la table avec "=" signe dans la fin qui ne faisait pas partie de l'empreinte digitale réelle et ne pouvait pas l'enlever.
(Désolé, je ne pouvais pas commenter comme je l'avais récemment enregistré)