Saltar al contenido

Huella digital SHA256 ssh proporcionada por el cliente, pero solo la huella digital md5 conocida para el servidor

Solución:

Anteriormente, la huella dactilar se proporcionaba como un hash md5 hexadecimal. A partir de OpenSSH 6.8, la huella digital ahora se muestra como base64 SHA256 (de forma predeterminada). No se pueden comparar estos directamente.

También agregaron una nueva opción de configuración FingerprintHash. Puedes poner

FingerprintHash md5

en tus ~/.ssh/config para volver al valor predeterminado anterior (menos seguro) o simplemente use esta opción para un solo uso:

ssh -o FingerprintHash=md5 example.org

que daría la huella digital como

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

Es de esperar que los administradores del servidor proporcionen ambos tipos de huellas digitales en un futuro próximo.

EDITAR:

Como se indica en los foros de Arch Linux, también hay una tercera opción:

Host example.org
    FingerprintHash md5

EDITAR:

Puede generar el hash de una clave arbitraria como se indica en el libro de cocina de OpenSSH:

Recupera la clave:

  • descargar la clave con ssh-keyscan example.org > key.pub
  • o: busque las claves en el servidor en /etc/ssh

Genera el hash:

  • asegúrese de tener solo una línea / tipo, así que elimine todas las demás en key.pub o corre ssh-keyscan -t rsa example.org > key.pub
  • ssh-keygen -l -f key.pub (hash predeterminado, según la versión de OpenSSH)
  • ssh-keygen -l -f key.pub -E md5 (md5 en OpenSSH actual)
  • awk '{print $2}' ssh_host_rsa_key.pub | base64 -d | sha256sum -b | awk '{print $1}' | xxd -r -p | base64 (sha256 en OpenSSH antiguo)
  • (Es posible que deba comenzar la línea con awk '{print $3}' para versiones más nuevas de ssh-keyscan porque el formato cambió)

Se acaba de crear un pequeño script bash que imprimirá una tabla con huellas digitales para todos los cifrados de clave permitidos en el servidor (según /etc/ssh/sshd_config) en ambos SSH-256 y MD5 algo. Aquí hay una salida de ejemplo:

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

El script también se ejecutará en servidores con SSH versión a continuación 6.8 (antes de -E md5 se agregó la opción).

Editar: Versiones actualizadas para versiones aún más recientes de SSH que cambiaron los cifrados predeterminados ahora con soporte para imágenes ASCII.

#!/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(/^HostKeys+/,"");print $0".pub"};' $SSHD_CONFIG)

echo
for line in "${ASCII[@]}"; do
    echo "$line"
done

Esta es una bonita impresión usando información de JonnyJDrespuesta. Gracias.

resulta que ssh-keygen (en algún momento después de la versión 6.6; presumiblemente 6.8) tiene un -E md5 opción que hará que imprima la huella digital como una huella digital md5. Entonces, si puede tomar de forma independiente el archivo de clave pública del servidor, puede alimentarlo a ssh-keygen -E md5 -l -f ssh_host_rsa_key.pub y obtenga su huella digital familiar.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *