Question SHA256 empreinte ssh fournie par le client mais uniquement empreinte 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 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 inciter les administrateurs du serveur à fournir une empreinte SHA256)?


105
2018-06-18 14:18


origine




Réponses:


Auparavant, l'empreinte digitale était donnée sous la forme d'un hachage md5 hexadécimal. Commençant par OpenSSH 6.8 L'empreinte est maintenant affichée en 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 ton ~/.ssh/config revenir à l'ancien (Moins sécurisé) par défaut ou utilisez simplement cette option pour un usage unique:

ssh -o FingerprintHash=md5 example.org

ce qui donnerait l'empreinte digitale comme

MD5:f6:fc:1c:03:17:5f:67:4f:1f:0b:50:5a:9f:f9:30:e5

Espérons que les administrateurs de serveurs fourniront les deux types d’empreintes digitales dans un avenir proche.

MODIFIER:

Comme indiqué dans le Arch Linux forums, il y a aussi une troisième option:

Host example.org
    FingerprintHash md5

MODIFIER:

Vous pouvez générer le hachage d'une clé arbitraire comme indiqué sur le OpenSSH Cookbook:

Récupérer la clé:

  • télécharger 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 que vous avez une seule ligne / type, donc supprimez tous les autres dans key.pub ou courir 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 en cours)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (sha256 sur l'ancien OpenSSH)
  • (Vous devrez peut-être commencer la ligne avec awk '{print $3}' pour les nouvelles versions de ssh-keyscan car le format a changé)

140
2018-06-18 14:18



savez-vous comment obtenir l'empreinte digitale sha256 sur le serveur au cas où j'y aurais accès? ssh-keygen -lf  sur le serveur seulement me donne l'impression md5, et pour la vie de moi je ne peux pas trouver comment obtenir le sha256 soit dans les pages de manuel ou le www jusqu'à présent ... - codeling
J'ai ajouté un extrait du livre de recettes OpenSSH en utilisant sha256sum à la réponse. - JonnyJD
merci, vous êtes le seul à donner une réponse qui a une valeur réelle. - Florian Heigl
Malheureusement, je reçois un hachage SHA-256 différent lorsque vous utilisez votre awk 1-liner (ne correspond pas au hachage indiqué par mon client) - Jonathan Cross
Merci pour la note, il y avait deux problèmes potentiels: 1) certains hôtes ont plusieurs clés, la ligne awk ne fonctionne qu'avec 2) les versions récentes de ssh-keys peuvent utiliser un format différent, donc il faut utiliser $ 3 au lieu de $ 2. (tous deux corrigés avec une modification) - JonnyJD


Nous venons de créer un petit script bash qui imprimera le tableau avec les empreintes digitales pour tous les chiffrements autorisés sur le serveur (selon /etc/ssh/sshd_config) à la fois SSH-256 et MD5 algo. Voici un exemple de sortie:

 +---------+---------+-----------------------------------------------------+
 | 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]-----+

Le script s'exécutera également sur les serveurs avec SSH version ci-dessous 6.8 (avant -E md5 l'option a été ajoutée).

Edit: versions mises à jour pour les versions encore plus récentes de SSH qui ont commuté les codes par défaut maintenant avec la prise en charge des images ASCII.

#!/bin/bash
# server_ssh_fingerprints
#
# Version 0.2
#
# 2016 Kepi <kepi@igloonet.cz
# 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

Ceci est juste jolie impression en utilisant des informations de JonnyJDla réponse. Merci.


23
2018-01-24 21:23



Je l'ai rendu plus robuste et une fonctionnalité légèrement améliorée; version 0.3 (avec changelog) ici: github.com/unixnut/scripts/blob/master/ssh_fprint Merci d'avoir écrit ceci, c'est génial! - Alastair Irvine


ssh-keygen (parfois après la version 6.6; probablement 6.8) a un -E md5 option qui provoquera l'impression de l'empreinte digitale sous la forme d'une empreinte md5. Donc, si vous pouvez récupérer indépendamment le fichier de clé publique du serveur, vous pouvez le transmettre à ssh-keygen -E md5 -l -f ssh_host_rsa_key.pub et obtenez votre empreinte digitale familière.


4
2018-01-08 06:29



tout cela est déjà bien formaté dans la réponse précédente. - Jakuje


essayé de modifier pour obtenir aussi l'art aléatoire dans la 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 '[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

... mais je ne suis pas un programmeur en fait et le script ne fonctionne pas comme prévu. J'apprécierais si quelqu'un peut aider à réparer (aussi le nettoyage). Il serait intéressant d'avoir côte à côte des images d'art aléatoires sha256 et md5 pour utiliser l'espace plus efficacement. J'ai également modifié les commandes md5 et sha256 car les commandes originales ne fonctionnaient pas pour moi (système probablement trop récent) - seul sha256 appris à la table avec le signe "=" à la fin qui ne faisait pas partie de l'empreinte réelle et ne pouvait pas le supprimer.

(désolé je ne pouvais pas commenter comme je me suis inscrit récemment)


0
2017-07-02 22:23



Si vous avez une nouvelle question, posez-la en cliquant sur le bouton Poser une question bouton. Inclure un lien vers cette question si cela aide à fournir un contexte. - Donald Duck
Eh bien, comme vous le voyez, la question n’est pas nouvelle, mais admettre que le script proposé n’a pas fonctionné comme prévu et qu’une nouvelle version, encore incomplète, a été proposée. Je pourrais modifier le script existant pour qu'il fonctionne comme prévu, mais j'ai essayé d'ajouter l'art aléatoire et cet identifiant de pièce n'est pas complet. En fait, il existe une proposition pour comparer certaines clés publiques et certaines clés proposées, mais cette variante ne résiste pas à MITM: ssh-keyscan -t ecdsa xxx.xxx.xxx.xxx | ssh-keygen -lv -f - && ssh -X -o VisualHostKey = yes -i ~ / .ssh / clé user@xxx.xxx.xxx.xxx - zeroconf
Je n'ai pas vu vos commentaires, mais aujourd'hui j'ai eu la même idée, donc ma réponse est maintenant mise à jour avec la version de travail pour les versions plus récentes d'OpenSSH, art ASCII inclus. - Kepi


La commande suivante fonctionne sur Ubuntu 16.04 / Centos >= 7

(Testé avec des serveurs: 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-

0
2017-12-12 11:34