L'empreinte digitale SHA256 ssh donnée par le client mais seulement l'empreinte digitale md5 connue pour le serveur

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é:

  • Téléchargez la clé avec ssh-keyscan example.org > key.pub
  • Ou: trouver les clés sur le serveur dans /etc/ssh

Générer le hash:

  • Assurez-vous d'avoir seulement une ligne / type, de sorte que soit supprimer tous les autres dans 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)
  • (Vous devrez peut-être démarrer la ligne avec 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é)