GNU/Linux >> Linux Esercitazione >  >> Linux

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

Comandi utilizzati

  • Visualizza l'ascii-art della chiave host pubblica memorizzata sul server (da eseguire sul lato server, quello 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 :visivo (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 :visivo (ascii-art)

    Hash impronte digitali :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 vuoi connetterti tramite ssh ):ti darà un primo ascii-art. Stampalo o scatta una foto.

In secondo luogo, 2. deve essere eseguito alla prima connessione SSH; mostrerà un secondo ascii-art. Se l'ascii-art è lo stesso, allora 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 cliente
$ 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)? 

Altre spiegazioni

Il primo comando visualizzerà l'ascii-art corrispondente all'impronta digitale del file fornito come input. Il file fornito come input è l'host pubblico chiave 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 va bene: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 è nel file, il client calcolerà l'impronta digitale di questa chiave host pubblica con un algoritmo hash (un diverso algoritmo hash darà un'impronta digitale diversa). Questa impronta precedentemente calcolata viene visualizzata (insieme all'ascii-art se l'opzione corrispondente è fornita) e dovrai rispondere sì o no a seconda che tu riconosca questa impronta o no (questa impronta è l'immagine/hash della chiave host pubblica del server). Se dici di sì, la chiave bublic del server (non la sua impronta digitale) verrà aggiunta al file ~/.ssh/known_hosts .

Possiamo notare che ~/.ssh/known_hosts è sotto la tua directory home (~), perché tu fidati di questo host (server), ma un altro utente potrebbe non fidarsi 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 l'ascii-art della chiave pubblica ricevuta dall'host_server_to_connect (secondo l'algoritmo hash fornito nelle opzioni). È come fare solo ssh, ma con più opzioni visive, quindi la connessione continuerà allo stesso modo di una normale connessione ssh.


Sul mio sistema devo specificare una chiave MD5 invece della SHA256 predefinita:

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

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


Aspetta, l'ho trovato. Esegui il comando:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

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...=

Note:

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

Questa è la riga che ho aggiunto al mio ~/.ssh/known_hosts file per autorizzare le 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 della chiave pubblica.
    Basta rimuovere la prima colonna (indirizzo IP o nome host) e salvarla o reindirizzarla a ssh-keygen -l che presenta l'impronta digitale.

Daniele aggiunge:

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

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

Linux
  1. Usa il terminale Linux per vedere quali file sono sul tuo computer

  2. Come usare il comando Linux grep

  3. Come usare il comando ssh-keygen in Linux

  4. Qual è l'uso di $# in Bash

  5. Qual è l'uso dell'opzione -o nel comando useradd?

Cos'è il comando Linux Watch + Esempi

Come utilizzare il comando Ping di Linux

Che cos'è il comando SSH e come utilizzare SSH per connettersi al server remoto

Qual è il comando kill in Linux?

Che cos'è la vulnerabilità di Logjam?

Uso del comando grep in Linux