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 corressh-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 JonnyJD
respuesta. 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.