Berechnen Sie den Fingerabdruck des RSA-Schlüssels

903

Ich muss die SSH-Schlüsselprüfung für GitHub durchführen, bin mir jedoch nicht sicher, wie ich meinen RSA-Schlüsselfingerabdruck finde. Ich habe ursprünglich eine Anleitung zum Generieren eines SSH-Schlüssels unter Linux befolgt.

Welchen Befehl muss ich eingeben, um meinen aktuellen Fingerabdruck des RSA-Schlüssels zu finden?

Zakoff
quelle
21
FWIW, ich komme immer wieder auf diesen Beitrag zurück, weil ich in Github Fingerabdrücke auf Schlüsseln sehe und sicherstellen möchte, dass ich den entsprechenden privaten Schlüssel verwende. vielleicht ist es nicht einen Github - Tag rechtfertigen , da dieser Beitrag , dass GitHub bezogene Anfrage hilft?
Hamx0r
4
@ hamx0r Ich bin auf diesen Beitrag zurückgekommen, weil Gitlab auch diese Fingerabdrücke verwendet ...
Ray Foss
1
Ich bin wegen Travis dazu gekommen, der es auch benutzt. : D
Per Lundberg
4
Für alle Linux-Benutzer, die "immer wieder auf diese Seite zurückkehren", kopieren Sie diese in Ihren bashrc: function fingerprint() { ssh-keygen -lf $1 -E md5 }Dann (nachdem Sie den bashrc bezogen haben) können Sie einen Fingerabdruck mitfingerprint ~/.ssh/key_file
Jeff Diederiks
1
Für diejenigen, die die @ JeffDiederiks-Funktion ausprobieren und sich fragen, warum sie nicht funktioniert, benötigen Bash-Funktionen ein Nachlaufen ;im Körper. Verwenden Sie sie function fingerprint() { ssh-keygen -lf $1 -E md5; }stattdessen.
tjjfvi

Antworten:

1261

Führen Sie den folgenden Befehl aus, um den SHA256-Fingerabdruck Ihres SSH-Schlüssels abzurufen ( -lbedeutet "Liste", anstatt einen neuen Schlüssel zu erstellen, -fbedeutet "Dateiname"):

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

Auf meinem Computer lautete der Befehl, den ich ausgeführt habe (unter Verwendung des öffentlichen RSA-Schlüssels):

$ 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)

Führen Sie Folgendes aus, um das GitHub (MD5) -Fingerabdruckformat mit neueren Versionen von ssh-keygen zu erhalten:

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

Bonusinformationen:

ssh-keygen -lffunktioniert auch auf known_hostsund authorized_keysDateien.

Führen Sie Folgendes aus, um die meisten öffentlichen Schlüssel auf Linux / Unix / OS X-Systemen zu finden

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

(Wenn Sie in die Homedirs anderer Benutzer sehen möchten, müssen Sie root oder sudo sein.)

Das ssh-add -list sehr ähnlich, listet jedoch die Fingerabdrücke der Schlüssel auf, die Ihrem Agenten hinzugefügt wurden. (OS X-Benutzer beachten, dass magisches passwortloses SSH über Schlüsselbund nicht dasselbe ist wie die Verwendung von ssh-agent.)

Marvin Pinto
quelle
5
Wie finde ich den Weg?
Pal4life
4
Da Ihr Beispiel-Hex-Fingerabdruck 32-stellig ist, glaube ich, dass es sich um einen MD5-Fingerabdruck handelt, richtig? Im Gegensatz zu einem 40-stelligen Fingerabdruck, der SHA1
culix
8
Auf Nicht-Ubuntu - Systemen die entsprechende Datei sein kann / etc / ssh, zB /etc/ssh/ssh_host_rsa_key.pub
Zorawar
12
Es ist erwähnenswert, dass der Fingerabdruck für beide Schlüssel in einem öffentlichen / privaten Schlüsselpaar gleich sein sollte. Der Fingerabdruck von .ssh/id_rsasollte also der gleiche sein wie der für .ssh/id_rsa.pub. Sie können also beide verwenden (und wenn Sie wie ich sind und die Tab-Vervollständigung lieben, dauert der Job 2 Tastenanschläge weniger. Effizienz!).
Parthian Shot
25
Verwendung , ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubwenn Sie wollen nicht den Standard sha256 Ausgang
user8162
675

Die neueren SSH-Befehle listen Fingerabdrücke als SHA256- Schlüssel auf.

Zum Beispiel:

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

Wenn Sie es mit einem alten Fingerabdruck vergleichen müssen, müssen Sie auch angeben, dass die MD5- Fingerabdruck-Hashing-Funktion verwendet werden soll.

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)

Auch verfügbar: -E sha1

Update ... JA ... ja ... ich weiß ... DSA-Schlüssel für SSH sollten nicht mehr verwendet werden, stattdessen sollten der ältere RSA-Schlüssel oder neuere Ekliptik-Schlüssel verwendet werden.

An jene 'Administratoren', die den Befehl, den ich oben verwendet habe, weiter bearbeiten. Hör auf, es zu ändern! Sie machen den Befehl und die daraus resultierende Ausgabe falsch!

Anthony
quelle
6
Es ist erwähnenswert, dass Sie sshden alten MD5-Fingerabdruck des Servers verwenden können ssh -o FingerprintHash=md5 example.org, wie in dieser Antwort erwähnt . (Ich habe nur danach gesucht, und diese Antwort hat mich zu dieser geführt, also denke ich, dass andere eine ähnliche Erfahrung machen könnten.)
Jonathan Y.
25
Diese Antwort ist am hilfreichsten für diejenigen, die ihre Schlüssel mit dem vergleichen möchten, was github.com zeigt (dh das in Hex formatierte MD5)
hamx0r
2
Auch sehr hilfreich für den Vergleich mit welchem ​​Kitt.
pjcard
27

Um Ihren Schlüssel unter Ubuntu zu sehen, geben Sie einfach den folgenden Befehl auf Ihrem Terminal ein:

ssh-add -l

Sie erhalten eine Ausgabe wie 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23folgt : yourName @ ubuntu (RSA)

Wenn Sie jedoch einen Fehler wie erhalten; Could not open a connection to your authentication agent.
Dann bedeutet dies, dass ssh-agent nicht ausgeführt wird. Sie können es starten / ausführen mit: ssh-agent bash(danke an @Richard in den Kommentaren) und dann erneut ausführenssh-add -l

Komu
quelle
5
Wenn Sie nicht mit Ubuntu arbeiten, wird möglicherweise leider Folgendes angezeigt: "Es konnte keine Verbindung zu Ihrem Authentifizierungsagenten hergestellt werden."
Rogerdpack
1
Dies funktioniert nur, wenn der Authentifizierungsagent ausgeführt wird.
Rufflewind
Um den Authentifizierungsagenten zum Laufen zu bringen, können Sie ihn verwenden ssh-agent bashund mit dem Leben fortfahren. Im Leben wie immer; ssh-agentist nicht als konsistente Implementierung auf allen Systemen garantiert.
Richard Kenneth Niescior
Ein weiterer Tipp für Linux; Die Option -F (Dump-Fingerabdruck) von ssh-keygen-g3 zeigt den Fingerabdruck des Schlüssels an: $ ssh-keygen-g3 -F /path/to/keyfile.pub answers.ssh.com/questions/494/…
AnneTheAgile
18

Ein Schlüsselpaar (der private und der öffentliche Schlüssel) haben denselben Fingerabdruck. Wenn Sie sich also nicht erinnern können, welcher private Schlüssel zu welchem ​​öffentlichen Schlüssel gehört, finden Sie die Übereinstimmung, indem Sie deren Fingerabdrücke vergleichen.

Die am häufigsten gewählte Antwort von Marvin Vinto liefert den Fingerabdruck einer öffentlichen SSH-Schlüsseldatei. Der Fingerabdruck des entsprechenden privaten SSH-Schlüssels kann ebenfalls abgefragt werden, erfordert jedoch eine längere Reihe von Schritten, wie unten gezeigt.

  1. Laden Sie den SSH-Agenten, falls Sie dies nicht getan haben. Am einfachsten ist es, aufzurufen

    $ ssh-agent bash
    

    oder

    $ ssh-agent tcsh
    

    (oder eine andere Shell, die Sie verwenden).

  2. Laden Sie den privaten Schlüssel, den Sie testen möchten:

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

    Sie werden aufgefordert, die Passphrase einzugeben, wenn der Schlüssel kennwortgeschützt ist.

  3. Geben Sie nun, wie andere gesagt haben, ein

    $ 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:...ist der Fingerabdruck, nach dem Sie suchen. Wenn mehrere Schlüssel vorhanden sind, werden mehrere Zeilen gedruckt, und die letzte Zeile enthält den Fingerabdruck des zuletzt geladenen Schlüssels.

  4. Wenn Sie den Agenten stoppen möchten (dh wenn Sie Schritt 1 oben aufgerufen haben), geben Sie einfach "exit" in die Shell ein, und Sie befinden sich vor dem Laden des ssh-Agenten wieder in der Shell.

Ich füge keine neuen Informationen hinzu, aber hoffentlich ist diese Antwort für Benutzer aller Ebenen klar.

Wirawan Purwanto
quelle
Der erste Absatz ist falsch ssh-add -lund gibt ssh-keygen -ldenselben Fingerabdruck für ein bestimmtes Schlüsselpaar zurück. Es sollte auch ein Kleinbuchstabe sein -l, kein Großbuchstabe.
Albertas Agejevas
Ich bestreite das nicht ssh-add -lund ssh-keygen -lgebe den gleichen Fingerabdruck für ein bestimmtes Schlüsselpaar zurück. Aber ich verstehe nicht, was mit meinen ursprünglichen Aussagen im ersten Absatz falsch war. Ich habe einen Satz hinzugefügt, um das zu verdeutlichen.
Wirawan Purwanto
1
Es ist nur einfacher, ssh-keygen auf einen Schlüssel zu verweisen, anstatt den Agenten zu starten, dann den Schlüssel zu laden und dann den Fingerabdruck zu erhalten.
Albertas Agejevas
1
Wenn Sie nur den privaten Schlüssel haben, müssen Sie ihn nicht unbedingt ausführen ssh-agent. Angenommen, PRIVKEYes wurde die private Schlüsseldatei und PUBKEYdie (anfangs nicht vorhandene) öffentliche Schlüsseldatei festgelegt. Gehen Sie ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"wie folgt vor : Um den öffentlichen SSH-Schlüssel neu zu generieren, ssh-keygen -E md5 -l -v -f "${PUBKEY}"wenn Sie den MD5-Hash oder nur ssh-keygen -l -v -f "${PUBKEY}"den SHA-256-Hash möchten (SHA-256 ist jetzt die Standardeinstellung).
David Tonhofer
12

Der schnellste Weg, wenn sich Ihre Schlüssel in einem SSH-Agenten befinden:

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

Jeder Schlüssel im Agenten wird wie folgt gedruckt:

4096 MD5:8f:c9:dc:40:ec:9e:dc:65:74:f7:20:c1:29:d1:e8:5a /Users/cmcginty/.ssh/id_rsa (RSA)
cmcginty
quelle
3
Ich brauchte einen schnelleren Weg, um meine Schlüssel mit denen in meinem GitHub-Konto abzugleichen, und diese Antwort half mir dabei.
Evansjs
11

Hier werden Inhalte aus AWS- Foren reproduziert , da ich sie für meinen Anwendungsfall nützlich fand. Ich wollte überprüfen, welche meiner Schlüssel mit denen übereinstimmen, die ich in AWS importiert habe

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

Wobei: - primary.pemder zu überprüfende private Schlüssel ist

Phil
quelle
9
$ ssh-add -l 

funktioniert auch unter Mac OS X 10.8 (Mountain Lion) - 10.10 (Yosemite).

Es unterstützt auch die Option -E, das Fingerabdruckformat anzugeben. Falls MD5 benötigt wird (es wird häufig verwendet, z. B. von GitHub), fügen Sie -E md5es einfach dem Befehl hinzu.

Geeklizzard
quelle
+1 für die einfachste Antwort. Aus man ssh-addder Option -list "Listet Fingerabdrücke aller derzeit vom Agenten vertretenen Identitäten auf"
XavierStuvw
8

Wenn Sie unter Windows PuTTY / Pageant ausführen, wird der Fingerabdruck aufgelistet, wenn Sie Ihren PuTTY-Schlüssel (.ppk) in Pageant laden. Es ist sehr nützlich, wenn Sie vergessen, welches Sie verwenden.

Geben Sie hier die Bildbeschreibung ein

Dmitri R117
quelle
3
Vielen Dank, manchmal vergessen wir Linux-Leute Windows, besonders als das OP Kitt erwähnte.
Jmons
@ DmitriR117 warum hast du einen schwarzen öffentlichen Schlüssel gemalt, wie er der ganzen Welt bekannt ist?
Michu93
8

Dies ist die Shell-Funktion, mit der ich meinen SSH-Schlüsselfingerabdruck zum Erstellen von DigitalOcean- Tröpfchen erhalte :

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

Legen Sie es in Ihre ~/.bashrc, Quelle, und dann können Sie den Fingerabdruck wie folgt erhalten:

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

Wenn Ihr SSH-Agent ausgeführt wird, ist dies der Fall

ssh-add -l

um RSA-Fingerabdrücke aller Identitäten -Laufzulisten oder um öffentliche Schlüssel aufzulisten.

Wenn Ihr Agent nicht ausgeführt wird, versuchen Sie Folgendes:

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

Und für Ihre öffentlichen Schlüssel:

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

Wenn Sie die Nachricht erhalten: ' Der Agent hat keine Identität. ', dann müssen Sie zuerst Ihren RSA-Schlüssel generieren ssh-keygen.

Kenorb
quelle
Ich habe openssh installiert und dann versucht, mit putty eine Verbindung zum Server herzustellen. Es wird ein ssh-ed25519 256-Fingerabdruck angezeigt, aber ich erhalte die Meldung "Keine Identität". Wissen Sie, wo dieser Schlüssel gefunden und aufgelistet werden kann? Gibt es einen Nachteil bei der Verwendung dieses Schlüssels gegenüber der Generierung eines neuen RSA-Schlüssels?
Lordcheeto
Fand es unter /etc/ssh/ssh_host_ed25519_key.pub. Der zweite Teil der Frage bleibt: Gibt es Nachteile bei der Verwendung dieses automatisch generierten Schlüssels?
Lordcheeto
1

Manchmal haben Sie eine Reihe von Schlüsseln in Ihrem ~/.sshVerzeichnis und wissen nicht, welche mit dem von GitHub / Gitlab / etc. Angezeigten Fingerabdruck übereinstimmen.

So zeigen Sie die Schlüsseldateinamen und MD5-Fingerabdrücke aller Schlüssel in Ihrem ~/.sshVerzeichnis an:

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

(Informationen zur Bedeutung der Parameter finden Sie in dieser Antwort zum findBefehl .

Beachten Sie, dass die privaten / öffentlichen Dateien, die zu einem Schlüssel gehören, denselben Fingerabdruck haben, sodass Duplikate angezeigt werden.

Dan Dascalescu
quelle
0

Google Compute Engine zeigt den Fingerabdruck des SSH-Hostschlüssels in der seriellen Ausgabe einer Linux-Instanz an. Die API kann diese Daten von GCE abrufen, und es ist nicht erforderlich, sich bei der Instanz anzumelden.

Ich habe es nirgendwo anders gefunden als am seriellen Ausgang. Ich denke, der Fingerabdruck sollte sich an einem programmiererfreundlicheren Ort befinden.

Es scheint jedoch, dass dies vom Typ einer Instanz abhängt. Ich verwende Instanzen von Debian 7 (Wheezy) f1-micro.

re Paul
quelle
-1

Um einen Remote-SSH-Server vor der ersten Verbindung zu überprüfen, können Sie unter www.server-stats.net/ssh/ alle SHH-Schlüssel für den Server sowie den Zeitpunkt anzeigen, an dem der Schlüssel bekannt ist.

Das ist nicht wie ein SSL-Zertifikat, aber definitiv ein Muss, bevor Sie zum ersten Mal eine Verbindung zu einem SSH-Server herstellen.

S. 974
quelle
4
Der Benutzer suchte nicht nach einer Website eines Drittanbieters, sondern nach einer Befehlszeile über das Betriebssystem.
Andrew Barber
Es ist also im Grunde das Konvergenz-Plugin , außer für SSH anstelle von SSL und mit nur einem (etwas zweifelhaften) Notar. Das klingt ungefähr richtig?
Parthian Shot
-1

Auf Fedora mache ich [finde ~ / .ssh], was mir sagt, dass die Schlüssel @ sind

/root/.ssh
/root/.ssh/authorized_keys
Jesse William Mac Dougall
quelle
Das OP scheint zu wissen, wo es seine Schlüssel finden kann (das ist es nicht, ~/.ssh/id*.pubist es) und möchte seine Fingerabdrücke bekommen.
Gert van den Berg