ottenere l'impronta digitale della chiave SSH in formato (vecchio) esadecimale sulla nuova versione di openssh


34

Sembra che openssh abbia cambiato il modo in cui visualizza le impronte digitali chiave.

Sto provando a ssh da una macchina client a un server:

  • client: ubuntu 14.04 con OpenSSH 6.6.1
  • server: FreeBSD che esegue OpenSSH 7.2p2.

Il client riporta l'hash md5 della chiave del server come una sequenza di 16 coppie di cifre esadecimali, in questo modo:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

Il server utilizza automaticamente l'hash sha256, ma grazie a questa risposta posso forzarlo a dare l'hash sha1 eseguendo:

[root@host /etc/ssh]# ssh-keygen -l -E sha1 -f ssh_host_ecdsa_key.pub

Voglio che il risultato sia simile al seguente:

a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

ma invece ottengo questo:

256 SHA1:KIh0ejR4O+RqrSq7JdGAASddRfI root@host.local (ECDSA)

Mi sembra che ora venga visualizzata una versione codificata in base64 dell'impronta digitale anziché cifre esadecimali.

Come posso ottenere il checksum della chiave del server nello stesso formato riportato dal client (più vecchio) (cifre esadecimali separate da due punti, hash sha1) in modo da verificare che siano uguali?

EDIT: La vecchia versione di SSH fornisce il checksum md5 , non il checksum sha1 come pensavo erroneamente. L'uso di quel checksum (come dovrebbe affermare la risposta ora accettata) nell'opzione -E fornisce l'output desiderato.

Risposte:


44

Il client riporta l'hash sha1 della chiave del server come una sequenza di 16 coppie di cifre esadecimali, in questo modo:

    a7:b1:3e:3d:84:24:a2:5a:91:5f:6f:e9:cf:dd:2b:6a

Questo è l'hash MD5.

Come puoi vedere in esecuzione

ssh-keygen -l -E md5 -f ssh_host_ecdsa_key.pub

ti fornirà la stessa impronta digitale di cui hai bisogno senza tale harakiri che stai spiegando nella tua risposta.


1
Sfortunatamente, questo non funziona. La mia domanda contiene il risultato dell'esecuzione del comando suggerito. Le versioni più recenti di ssh-keygen forniscono l'hash md5 come stringa (codificata in base64?) Anziché come stringa esadecimale. "All that harakiri" (una descrizione adatta!) È il modo più semplice che ho trovato per ottenere una stringa esadecimale di vecchio stile dalla nuova versione degli strumenti openssh.
stocastico

A meno che FreeBSD non rompa qualcosa (o rimuova il supporto MD5), non c'è motivo per cui non dovrebbe funzionare. Nota che il tuo comando elenca erroneamente sha1invece di md5! Ho superato la versione di Ubuntu con openssh-6.9, ma funziona perfettamente.
Jakuje,

1
md5 invece di sha1 ... non sono sicuro di come mi sia perso. Questo in effetti dà un risultato corrispondente.
stocastico

Io ho il problema opposto. Ho il md5 e voglio l'altro formato. Come lo ottengo?
Gabriel Staples,

1
Funziona quando il comando viene eseguito su Ubuntu. Non funziona quando il comando viene eseguito su centos.
Marinos Il

4

A quanto pare, il ricettario SSH ha un modo per generare manualmente le chiavi nel vecchio formato esadecimale. L'ho usato sul server freebsd.

awk '{print $ 2}' key.pub | base64 -d | md5 | sed 's /../&:/ g; s /:. * $ // '

Abbattere questo:

awk '{print $ 2}' key.pub

stampa la seconda colonna (spazio separato) in "key.pub", che è la chiave stessa

base64 -d

la chiave è codificata in base64. Ciò genererà i byte effettivi della chiave

md5

questo è l'equivalente di freebsd di 'md5sum -b' che è stato specificato nella ricetta nella pagina del ricettario di ssh

sed 's /../&:/ g; s /:. * $ // '

Ci sono due comandi sed qui:

s /../&:/ g;

sostituisci ogni coppia di caratteri sulla linea (grazie alla bandiera 'g' alla fine) con quella stessa coppia seguita da due punti

s /:. * $ // '

rimuovi i due punti finali (sostituisci i due punti seguiti da uno spazio seguito da qualsiasi cosa fino alla fine della linea con nulla).


4

In casi come questo uso il seguente piccolo script (testato su Debian e Ubuntu):

#!/bin/sh

# Gather the public ssh host keys for the given host
# and for each key print the fingerprint in hex format using the given
# checksum command (e.g. md5sum, sha256sum, ...)

if [ "$#" != 2 ]; then
  echo "usage: $0 hostname checksum_command"
  exit 1
fi

ssh-keyscan $1 2>/dev/null | while read -r line; do
  echo "Scanned key:"
  echo $line
  echo "$2 fingerprint:"
  echo $line | awk '{print $3}' | base64 -d | $2 -b | awk '{print $1}' | sed 's/../&:/g' | sed 's/:$//'
  echo
done

Esempio di utilizzo:

$ myscript host.example.com md5sum
Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
md5sum fingerprint:
6c:ef:26:f7:98:ad:ed:5b:cc:ff:83:13:46:c9:f6:79

Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
md5sum fingerprint:
b2:9c:cd:30:b1:38:e3:d1:17:d6:73:eb:03:9a:80:83

$ myscript host.example.com sha256sum
Scanned key:
host.example.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC4aLMajBvisnWNR2VX5K1KEkNeRmzlcs+svbY6/DiumMTZNtqB5duZjGkMmEbIclHaT7rQG9efAWsNhai5cJVRZ4VX1Gu/TLycEk4OY56MrrWjQYweSUr/W6E0eVCf7gh/ym2vMcevct4373fGDdlogk9Wa97lDV6PUXRy/znxRlo3tBc6KMOZIBoPu8UjeLr2ZPNPjO6hXX/96HbYfboxjhMl5eb8AWR0MGd4qU7RZZa2XhT4/4eSo8h9gEq8V3tasB24fMdw3K+HRiDyZm8uoNq+IrJlC22pBpzxRQtsv0Nd+uC5pK/UPVI3AFfdHMrmn7IHRio8aEaTloM6MRysGMtXE0kFQ/pV2U3TBmK/9wxID83qMDsQeUH4oTyjSJ0dCBuqgVQUg44z5qXVOK7gruvZSTyH7DsIyAXhlvLNwdtXPJ4HPQ90ZxLpiFWYgSPErQgbfgKeFkoSQiSP1M+UMkITCGRKMeUeDINheRJh/5y8+C3DjE54xyI4903ztyI7HqgVTOOFCtf+dlhCuS6+J20PFXEHDMdGCwmPQrKOG9Rb4NBxuvtn7MxJnwnlIu3nhDjr8SlZDOTvuK+bLpc4AZwEsNY7ANKFvj2mqE6hjkhu+x7khg84VQ6BKOmHIQnMrCpqICaNgB7Vz2d183BETrnfKQaPh79G5cQox5vwvw==
sha256sum fingerprint:
f4:61:58:e4:90:65:c4:70:98:7f:d1:40:0a:d8:d9:79:14:e6:91:dc:b6:ed:91:8c:c0:df:d9:65:db:dd:a0:18

Scanned key:
host.example.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUXq7vpcEpnZQxxiLw/tdg8ui4LoqbW1O5nGyLtGw49
sha256sum fingerprint:
4b:73:d1:d7:80:87:46:64:56:71:64:10:7a:66:83:9b:c7:58:39:0b:16:74:dd:9b:d9:4b:e5:d5:61:7e:99:45
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.