it-swarm-eu.dev

Quale comando devo usare per vedere qual è l'impronta digitale della chiave ECDSA del mio server?

Vedo cose su Google su come vedere l'impronta digitale della chiave RSA, ma non l'impronta digitale ECDSA.

68
trusktr

Aspetta, l'ho trovato. Esegui il comando:

ssh-keygen -l -f /etc/ssh/ssh_Host_ecdsa_key.pub
105
trusktr

Con un recente ssh (OpenSSH_6.0p1, OpenSSL 1.0.0j 10 maggio 2012), l'ho scritto in questo modo:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

Appunti:

  • se il tuo sshd funziona su una porta personalizzata, aggiungi '-p portNumber' al ssh-keyscan comando)
  • ssh-keyscan scrive su stderr, non stdout (!), quindi bash reindirizzamento '2>&1 '(che può variare a seconda della Shell)

Questa è la linea che ho aggiunto al mio ~/.ssh/known_hosts file per autorizzare richieste ssh da localhost per i miei test (principalmente per gitolite, che usa ssh ).


Daniel Böhmer conferma nei commenti :

  • ssh-keyscan fornisce le chiavi pubbliche complete del server SSH
  • l'output di ssh-keygen è quasi identico al formato dei file delle chiavi pubbliche.
    Basta rimuovere la prima colonna (indirizzo IP o nome host) e salvarla o reindirizzarla a ssh-keygen -l che presenta l'impronta digitale.

Daniel aggiunge:

Mostra le impronte digitali di tutte le chiavi pubbliche del server memorizzate in ~/.ssh/know_hosts:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done
14
VonC

Sul mio sistema ho bisogno di specificare una chiave MD5 anziché la SHA256 predefinita:

ssh-keygen -l -E md5 -f /etc/ssh/ssh_Host_ecdsa_key.pub

Questo ha prodotto una stringa in un formato che corrispondeva all'errore che ho visto sul client.

7
David Elrod

Comandi utilizzati

  • Visualizza ascii-art della chiave host pubblica memorizzata sul server (da eseguire sul lato server, quella a cui ti connetti via ssh):

    ssh-keygen -l -v -f /etc/ssh/ssh_Host_ecdsa_key.pub
    

    - l: mostra l'impronta digitale del file della chiave pubblica specificato.

    - v: visual (ascii-art)

    - f: file

  • Visualizza ascii-art della chiave host pubblica del server remoto (da eseguire sul lato client, quello da cui ti connetti tramite ssh):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <Host_server_to_connect>
    

    - o: opzione

    visualhostkey: visual (ascii-art)

    FingerprintHash: hash algo da usare

Cosa fare per verificare l'autenticità di un host/server

Innanzitutto, 1. deve essere eseguito localmente sul server (quello a cui si desidera connettersi tramite ssh): ti darà una prima ASCII-art. Stampalo o scatta una foto.

Secondo, 2. deve essere fatto alla prima connessione SSH; mostrerà una seconda arte ASCII. Se ascii-art è lo stesso, puoi rispondere al "mi fido?" domanda (es. Are you sure you want to continue connecting (yes/no)).

Esempio

  • lato server
$ ssh-keygen -l -v -f /etc/ssh/ssh_Host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • lato client
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of Host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

Qualche spiegazione in più

Il primo comando visualizzerà la ASCII-ART corrispondente all'impronta digitale del file fornito come input. Il file fornito come input è la chiave pubblica Host del server. Quando un client si connette (non solo per la prima volta), il server invierà la sua chiave host pubblica. Questa chiave host pubblica verrà cercata in ~/.ssh/known_hosts. Se la chiave pubblica è nel file, allora è ok: l'host (server) è noto, quindi passiamo al passaggio successivo per autenticare l'utente (l'autenticazione dell'utente non è descritta in questo post). Se la chiave pubblica non si trova nel file, il client calcolerà l'impronta digitale di questa chiave host pubblica con un algoritmo hash (un diverso algoritmo hash fornirà un'impronta digitale diversa). Questa impronta digitale calcolata in precedenza viene visualizzata (insieme all'ascii-art se viene fornita l'opzione corrispondente) e dovrai rispondere sì o no a seconda del riconoscimento di questa impronta digitale o no (questa impronta digitale è l'immagine/hash della chiave pubblica dell'host della server). Se dici di sì, allora la chiave pubblica del server (non la sua impronta digitale) verrà aggiunta al file ~/.ssh/known_hosts.

Possiamo notare che ~/.ssh/known_hosts È nella tua directory home (~), perché tu ti fidi di questo Host (server), ma un utente diverso potrebbe non fidarti dello stesso di te. Inoltre, la chiave pubblica host del server non dipende dall'utente, quindi è memorizzata in /etc/ssh/.

Il secondo comando visualizzerà l'impronta digitale e la ASCII-art della chiave pubblica ricevuta da Host_server_to_connect (secondo l'algoritmo hash fornito nelle opzioni). È lo stesso che fare solo ssh, ma con più opzioni visive, quindi la connessione continuerà allo stesso modo di una normale connessione ssh.

2
Nicolas VERHELST