Calcola l'impronta digitale della chiave RSA


903

Devo fare il controllo della chiave SSH per GitHub, ma non sono sicuro di come trovare la mia impronta digitale della chiave RSA. Inizialmente ho seguito una guida per generare una chiave SSH su Linux.

Qual è il comando che devo inserire per trovare la mia attuale impronta digitale della chiave RSA?


21
FWIW, continuo a tornare a questo post perché github è dove vedo le impronte digitali sulle chiavi e voglio assicurarmi di usare la chiave privata corrispondente. forse non garantisce un tag github poiché questo post aiuta che l'indagine GitHub-correlato?
hamx0r

4
@ hamx0r Sono tornato a questo post perché Gitlab usa anche quelle impronte digitali ...
Ray Foss

1
Ci sono arrivato grazie a Travis, che lo usa anche. : D
Per Lundberg,

4
Per tutti coloro che usano Linux che "continuano a tornare a questa pagina", copiatelo nella vostra bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Quindi (dopo averlo sorgente la bashrc) potete ottenere un'impronta digitale confingerprint ~/.ssh/key_file
Jeff Diederiks,

1
Per coloro che provano la funzione @JeffDiederiks e si chiedono perché non funzioni, le funzioni di Bash hanno bisogno di un trascinamento ;nel corpo, quindi usa function fingerprint() { ssh-keygen -lf $1 -E md5; }invece.
tjjfvi,

Risposte:


1261

Eseguire il comando seguente per recuperare l'impronta digitale SHA256 della chiave SSH ( -lsignifica "elenco" anziché creare una nuova chiave, -fsignifica "nome file"):

$ ssh-keygen -lf /path/to/ssh/key

Quindi, per esempio, sulla mia macchina il comando che ho eseguito era (usando la chiave pubblica RSA):

$ ssh-keygen -lf ~/.ssh/id_rsa.pub
2048 00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff /Users/username/.ssh/id_rsa.pub (RSA)

Per ottenere il formato dell'impronta digitale GitHub (MD5) con le versioni più recenti di ssh-keygen, eseguire:

$ ssh-keygen -E md5 -lf <fileName>

Informazioni sul bonus:

ssh-keygen -lffunziona anche su known_hostse authorized_keysfile.

Per trovare la maggior parte delle chiavi pubbliche sui sistemi Linux / Unix / OS X, eseguire

$ find /etc/ssh /home/*/.ssh /Users/*/.ssh -name '*.pub' -o -name 'authorized_keys' -o -name 'known_hosts'

(Se vuoi vedere all'interno degli homedir di altri utenti, dovrai essere root o sudo.)

Il ssh-add -lè molto simile, ma elenca le impronte digitali di chiavi aggiunte al vostro agente. (Gli utenti di OS X prendono atto che SSH magico senza password tramite portachiavi non è lo stesso che usare ssh-agent.)


5
Come trovo qual è il percorso?
pal4life,

4
Dal momento che la tua impronta digitale esadecimale di esempio è di 32 cifre, credo che sarebbe un'impronta digitale MD5, giusto? Al contrario di un'impronta digitale di 40 cifre, che indicherebbe SHA1
culix

8
Sui sistemi non Ubuntu il file pertinente può essere in / etc / ssh, ad esempio /etc/ssh/ssh_host_rsa_key.pub
Zorawar,

12
Vale la pena notare che l'impronta digitale dovrebbe essere la stessa per entrambe le chiavi in ​​una coppia di chiavi pubblica / privata; quindi l'impronta digitale di .ssh/id_rsadovrebbe essere la stessa di quella per .ssh/id_rsa.pub. Quindi, puoi usare uno dei due (e, se sei come me e ami il completamento delle tabulazioni, il lavoro richiede 2 battiture in meno. Efficienza!).
Parthian Shot il

25
utilizzare ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubse non si desidera l' uscita standard sha256
user8162

677

I nuovi comandi SSH elencheranno le impronte digitali come chiave SHA256 .

Per esempio:

ssh-keygen -lf ~/.ssh/id_dsa.pub 
1024 SHA256:19n6fkdz0qqmowiBy6XEaA87EuG/jgWUr44ZSBhJl6Y (DSA)

Se devi confrontarlo con una vecchia impronta digitale, devi anche specificare di utilizzare la funzione di hashing dell'impronta digitale MD5 .

ssh-keygen -E md5 -lf ~/.ssh/id_dsa.pub
2048 MD5:4d:5b:97:19:8c:fe:06:f0:29:e7:f5:96:77:cb:3c:71 (DSA)

Anche disponibile: -E sha1

Aggiorna ... SÌ ... sì ... lo so ... Le chiavi DSA per SSH non dovrebbero più essere utilizzate, al suo posto si dovrebbero usare la chiave RSA più vecchia o le chiavi eclittiche più recenti.

A quegli "amministratori" che continuano a modificare il comando che ho usato in precedenza. Smetti di cambiarlo! Il comando e l'output risultante non corrispondono correttamente!


6
Vale la pena menzionare qui che puoi dire sshdi mostrarti la vecchia impronta digitale MD5 del server usando ssh -o FingerprintHash=md5 example.org, come menzionato in questa risposta . (Stavo solo cercando quello, e questa risposta mi ha portato a quello, quindi immagino che altri potrebbero avere un'esperienza simile.)
Jonathan Y.

25
Questa risposta è molto utile per coloro che desiderano confrontare le proprie chiavi con ciò che mostra github.com (ovvero MD5 formattato in esadecimale)
hamx0r

2
Molto utile anche per ciò che si confronta con ciò che lo stucco segnalerà.
pjcard

27

Per vedere la tua chiave su Ubuntu, inserisci il seguente comando sul tuo terminale:

ssh-add -l

Otterrai un output come questo: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Se tuttavia ricevi un errore simile; Could not open a connection to your authentication agent.
Quindi significa che ssh-agent non è in esecuzione. È possibile avviarlo / eseguirlo con: ssh-agent bash(grazie a @Richard nei commenti) e quindi rieseguiressh-add -l


5
Se non sei su Ubuntu potresti purtroppo ottenere questo "Impossibile aprire una connessione al tuo agente di autenticazione".
rogerdpack,

1
Funziona solo se l'agente di autenticazione è in esecuzione.
Rufflewind,

Per far funzionare l'agente di autenticazione puoi usare ssh-agent bashe procedere con la vita. Nella vita come sempre; ssh-agentnon è garantito come implementazione coerente su tutti i sistemi.
Richard Kenneth Niescior,

Un altro suggerimento per Linux; L'opzione -F (dump fingerprint) di ssh-keygen-g3 visualizzerà l'impronta digitale della chiave: $ ssh-keygen-g3 -F /path/to/keyfile.pub reply.ssh.com/questions/494/…
AnneTheAgile

18

Una coppia di chiavi (le chiavi privata e pubblica) avrà la stessa impronta digitale; quindi nel caso non ricordi quale chiave privata appartiene a quale chiave pubblica, trova la corrispondenza confrontando le loro impronte digitali.

La risposta più votata da Marvin Vinto fornisce l'impronta digitale di un file di chiave SSH pubblica . Anche l'impronta digitale della chiave SSH privata corrispondente può essere interrogata, ma richiede una serie più lunga di passaggi, come mostrato di seguito.

  1. Carica l'agente SSH, se non l'hai ancora fatto. Il modo più semplice è invocare

    $ ssh-agent bash
    

    o

    $ ssh-agent tcsh
    

    (o un'altra shell che usi).

  2. Carica la chiave privata che desideri testare:

    $ ssh-add /path/to/your-ssh-private-key
    

    Ti verrà chiesto di inserire la passphrase se la chiave è protetta da password.

  3. Ora, come altri hanno già detto, digita

    $ ssh-add -l
    1024 fd:bc:8a:81:58:8f:2c:78:86:a2:cf:02:40:7d:9d:3c you@yourhost (DSA)
    

    fd:bc:...è l'impronta digitale che stai cercando. Se sono presenti più chiavi, verranno stampate più righe e l'ultima riga contiene l'impronta digitale dell'ultima chiave caricata.

  4. Se vuoi fermare l'agente (cioè, se hai invocato il passaggio 1 sopra), digita semplicemente `exit 'sulla shell e tornerai sulla shell prima del caricamento dell'agente ssh.

Non aggiungo nuove informazioni, ma spero che questa risposta sia chiara per gli utenti di tutti i livelli.


Il primo paragrafo non è vero ssh-add -le ssh-keygen -lrestituisce la stessa impronta digitale per una determinata coppia di chiavi. Inoltre, dovrebbe essere in minuscolo -l, non in maiuscolo.
Albertas Agejevas,

Non lo contesto ssh-add -le ssh-keygen -lrestituisco la stessa impronta digitale per una determinata coppia di chiavi. Ma non capisco cosa non andava nelle mie dichiarazioni originali sul primo paragrafo. Ho aggiunto una frase per chiarire.
Wirawan Purwanto,

1
È più semplice puntare ssh-keygen su una chiave, piuttosto che avviare l'agente, quindi caricare la chiave, quindi ottenere l'impronta digitale.
Albertas Agejevas,

1
Se hai solo la chiave privata, non devi necessariamente eseguirla ssh-agent. Supponendo che PRIVKEYsia stato impostato il file della chiave privata ed PUBKEYè stato impostato sul file della chiave pubblica (inizialmente inesistente), fare: ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"per rigenerare la chiave pubblica SSH, quindi ssh-keygen -E md5 -l -v -f "${PUBKEY}"se si desidera l'hash MD5 o solo ssh-keygen -l -v -f "${PUBKEY}"se si desidera l'hash SHA-256 (SHA-256 è l'impostazione predefinita ora).
David Tonhofer,

12

Il modo più veloce se le tue chiavi sono in un agente SSH:

$ ssh-add -L | ssh-keygen -E md5 -lf /dev/stdin

Ogni chiave nell'agente verrà stampata come:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)

3
Avevo bisogno di un modo più rapido per abbinare le mie chiavi a quelle del mio account GitHub e questa risposta mi ha aiutato a fare proprio questo.
Evanjs,

11

Riproduzione di contenuti dai forum AWS qui, perché l'ho trovato utile nel mio caso d'uso: volevo verificare quale delle mie chiavi corrispondeva a quelle che avevo importato in AWS

openssl pkey -in ~/.ssh/ec2/primary.pem -pubout -outform DER | openssl md5 -c

Dove: - primary.pemè la chiave privata da controllare


9
$ ssh-add -l 

funzionerà anche su Mac OS X v10.8 (Mountain Lion) - v10.10 (Yosemite).

Supporta anche l'opzione -Eper specificare il formato dell'impronta digitale, quindi nel caso sia necessario MD5 (viene spesso utilizzato, ad esempio da GitHub), basta aggiungere -E md5al comando.


+1 per la risposta più semplice. Da man ssh-addl'opzione -lè "Elenca le impronte digitali di tutte le identità attualmente rappresentati dall'agente"
XavierStuvw

8

Su Windows, se si esegue PuTTY / Pageant, l'impronta digitale viene elencata quando si carica la chiave PuTTY (.ppk) in Pageant. È piuttosto utile nel caso in cui dimentichi quale stai usando.

Inserisci qui la descrizione dell'immagine


3
Grazie, a volte noi Linux ci dimentichiamo di Windows, specialmente perché l'OP ha menzionato lo stucco.
Jmons,

@ DmitriR117 perché hai dipinto la chiave pubblica nera come può essere conosciuta in tutto il mondo?
Michu93,

8

Questa è la funzione shell che utilizzo per ottenere l' impronta digitale del mio tasto SSH per la creazione di goccioline DigitalOcean :

fingerprint() {
    pubkeypath="$1"
    ssh-keygen -E md5 -lf "$pubkeypath" | awk '{ print $2 }' | cut -c 5-
}

Mettilo nel tuo ~/.bashrc, cercalo e quindi puoi ottenere l'impronta digitale in questo modo:

$ fingerprint ~/.ssh/id_rsa.pub
d2:47:0a:87:30:a0:c0:df:6b:42:19:55:b4:f3:09:b9

2

Se il tuo agente SSH è in esecuzione, lo è

ssh-add -l

per elencare le impronte digitali RSA di tutte le identità o -Lper elencare le chiavi pubbliche.

Se il tuo agente non è in esecuzione, prova:

ssh-agent sh -c 'ssh-add; ssh-add -l'

E per le tue chiavi pubbliche:

ssh-agent sh -c 'ssh-add; ssh-add -L'

Se viene visualizzato il messaggio: " L'agente non ha identità. ', devi prima generare la chiave RSA ssh-keygen.


Ho installato openssh, quindi ho provato a connettermi al server usando putty. Presenta un'impronta digitale ssh-ed25519 a 256 tasti, ma sto ricevendo il messaggio "nessuna identità". Sai dove è possibile trovare ed elencare questa chiave? C'è un aspetto negativo nell'utilizzo di questa chiave, rispetto alla generazione di una nuova chiave RSA?
lordcheeto,

Trovato sotto /etc/ssh/ssh_host_ed25519_key.pub. La seconda parte della domanda rimane: qualche svantaggio nell'uso di questa chiave generata automaticamente?
lordcheeto,

1

A volte puoi avere un sacco di chiavi nella tua ~/.sshdirectory e non sai quale corrisponda all'impronta digitale mostrata da GitHub / Gitlab / etc.

Ecco come mostrare i nomi dei file chiave e le impronte digitali MD5 di tutte le chiavi nella tua ~/.sshdirectory:

cd ~/.ssh
find . -type f -exec printf "\n{}\n" \; -exec ssh-keygen -E md5 -lf {} \;

(Per cosa significano i parametri, fare riferimento a questa risposta sul findcomando .

Nota che i file privati ​​/ pubblici che appartengono a una chiave hanno la stessa impronta digitale, quindi vedrai duplicati.


0

Google Compute Engine mostra l'impronta digitale della chiave host SSH nell'output seriale di un'istanza di Linux. L'API può ottenere quei dati da GCE e non è necessario accedere all'istanza.

Non l'ho trovato altrove ma dall'output seriale. Penso che l'impronta digitale dovrebbe trovarsi in un posto più adatto ai programmatori.

Tuttavia, sembra che dipenda dal tipo di un'istanza. Sto usando istanze di Debian 7 (Wheezy) f1-micro.


-1

Per controllare un server SSH remoto prima della prima connessione, è possibile dare un'occhiata a www.server-stats.net/ssh/ per vedere tutte le chiavi SHH per il server, nonché da quando la chiave è nota.

Non è come un certificato SSL, ma sicuramente un must prima di connettersi a qualsiasi server SSH per la prima volta.


4
L'utente non stava cercando un sito Web di terze parti, ma una riga di comando dal sistema operativo stesso.
Andrew Barber,

Quindi, è fondamentalmente il plugin di convergenza , ad eccezione di SSH invece di SSL, e con un solo notaio (un po 'incerto). Che suono su giusto?
Parthian Shot il

-1

Su Fedora lo faccio, il locate ~/.sshche mi dice che le chiavi sono a

/root/.ssh
/root/.ssh/authorized_keys

1
L'OP sembra sapere dove trovare le chiavi (questo non è, ~/.ssh/id*.pubè) e vuole ottenere le loro impronte digitali.
Gert van den Berg,
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.