2012-05-08 14:22:34 +0000 2012-05-08 14:22:34 +0000
147
147

Was ist ein Fingerabdruck eines SSH-Schlüssels und wie wird er erzeugt?

Ich stelle immer wieder fest, dass ich diese Meldung erhalte, wenn ich ssh in einen neuen Rechner eingebe:

12:f8:7e:78:61:b4:bf:e2:de:24:15:96:4e:d4:72:53

Wofür steht er? Wird jedes Gerät jedes Mal den gleichen Fingerabdruck haben?

Wie werden diese Fingerabdrücke erzeugt? Von welchen Parametern hängen sie ab?

Antworten (5)

128
128
128
2012-07-24 16:26:09 +0000

Sie können einen Fingerabdruck für einen öffentlichen Schlüssel erzeugen, indem Sie ssh-keygen wie folgt verwenden:

ssh-keygen -lf /path/to/key.pub

Konkretes Beispiel (wenn Sie einen öffentlichen RSA-Schlüssel verwenden):

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

Der erste Teil (2048) ist die Schlüssellänge in Bits, der zweite Teil (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff) ist der Fingerabdruck des öffentlichen Schlüssels und der dritte Teil ist der Speicherort der öffentlichen Schlüsseldatei selbst.

In neueren Versionen von OpenSSH wird Base64-kodiertes SHA-256 anstelle von hexadezimalem MD5 angezeigt. Um den Hash im Legacy-Stil anzuzeigen, verwenden Sie

$ ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub
74
74
74
2014-02-08 20:40:35 +0000

Der Fingerabdruck ist der MD5 über den binären Daten innerhalb des Base64-kodierten öffentlichen Schlüssels.

$ ssh-keygen -f foo
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in foo.
Your public key has been saved in foo.pub.
The key fingerprint is:
65:30:38:96:35:56:4f:64:64:e8:e3:a4:7d:59:3e:19 andrew@localhost
The key's randomart image is:
+--[RSA 2048]----+
| +*..+* |
| =. +.= |
| . . .o . |
| o+ E |
| S= . + o |
| . o o + |
| . . |
| |
| |
+-----------------+
$ cat foo.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp andrew@localhost
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDEbKq5U57fhzQ3SBbs3NVmgY2ouYZfPhc6cXBNEFpRT3T100fnbkYw+EHi76nwsp+uGxk08kh4GG881DrgotptrJj2dJxXpWp/SFdVu5S9fFU6l6dCTC9IBYYCCV8PvXbBZ3oDZyyyJT7/vXSaUdbk3x9MeNlYrgItm2KY6MdHYEg8R994Sspn1sE4Ydey5DfG/WNWVrzFCI0sWI3yj4zuCcUXFz9sEG8fIYikD9rNuohiMenWjkj6oLTwZGVW2q4wRL0051XBkmfnPD/H6gqOML9MbZQ8D6/+az0yF9oD61SkifhBNBRRNaIab/Np7XD61siR8zNMG/vCKjFGICnp' \
    | base64 -D | md5
6530389635564f6464e8e3a47d593e19

Der md5sum 6530389635564f6464e8e3e3a47d593e19 ist der bei der Schlüsselerzeugung angezeigte Fingerabdruck, nur ohne die trennenden Doppelpunkte.


Wenn Sie jedoch mit den Fingerabdrücken zu tun haben, die Amazon in der EC2 Key Pairs-Konsole anzeigt, das kann leider ein anderes Biest sein . Wenn es sich um eine 32-stellige Hex-Zeichenfolge handelt, handelt es sich um den oben genannten Standard-Fingerabdruck des öffentlichen MD5-SSH-Schlüssels. Wenn es sich jedoch um 40 Hexadezimalziffern handelt, handelt es sich eigentlich um einen Fingerabdruck, der aus dem SHA1 des privaten Schlüssels im PKCS#8-Format berechnet wird:

$ openssl pkcs8 -in foo -nocrypt -topk8 -outform DER | openssl sha1 -c
e2:77:39:d3:53:a7:62:68:5f:da:82:0e:99:61:30:64:a2:88:c4:58
69
69
69
2012-05-08 14:41:50 +0000

Der Fingerabdruck basiert auf dem öffentlichen Schlüssel des Hosts, der normalerweise auf “/etc/ssh/ssh_host_rsa_key.pub” basiert. Im Allgemeinen dient er der einfachen Identifizierung/Überprüfung des Hosts, mit dem Sie sich verbinden.

Wenn sich der Fingerabdruck ändert, hat der Rechner, mit dem Sie sich verbinden, seinen öffentlichen Schlüssel geändert. Das ist vielleicht nicht schlecht (passiert bei einer Neuinstallation von ssh), aber es könnte auch darauf hinweisen, dass Sie sich mit einem anderen Rechner derselben Domäne/IP verbinden (passiert, wenn Sie sich über etwas wie Load Balancer verbinden) oder dass ein Man-in-the-Middle-Angriff auf Sie abzielt, bei dem der Angreifer irgendwie Ihre ssh-Verbindung abfängt/umleitet, um sich mit einem anderen Host zu verbinden, der Ihren Benutzer/pw ausspionieren könnte.

Unterm Strich: Wenn Sie vor einem geänderten Fingerabdruck gewarnt werden, seien Sie vorsichtig und überprüfen Sie doppelt, ob Sie sich tatsächlich über eine sichere Verbindung mit dem richtigen Host verbinden. Auch wenn dies meistens harmlos ist, kann es ein Hinweis auf ein mögliches Problem sein

Siehe: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html und: http://en.wikipedia.org/wiki/Public_key_fingerprint

23
23
23
2019-03-29 21:52:44 +0000

Wenn Sie eine SSH-Schlüsseldatei überprüfen wollen, um zu sehen, ob sie mit dem übereinstimmt, was von github als “Deploy key” gemeldet wird, ist dies für Sie…

Von der privaten URL: https://github.com/\/<repo_name>/settings/keys werden Sie sehen

Am Terminal:

$ ls -l id*
-rw------- 1 bruno staff 1675 Mar 29 17:03 id_rsa
-rw-r--r-- 1 bruno staff 416 Mar 29 17:03 id_rsa.pub

$ ssh-keygen -E md5 -lf id_rsa
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

$ ssh-keygen -E md5 -lf id_rsa.pub
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e ec2-user@ip-10-2-1-16.ec2.internal (RSA)

Sie werden feststellen, dass Sie für den privaten und den öffentlichen Schlüssel den gleichen Fingerabdruck erhalten.

Derselbe Befehl kann mit einer netten Funktion von GitHub kombiniert werden, nämlich der Tatsache, dass sie die öffentlichen SSH-Schlüssel der Benutzer öffentlich unter https://github.com/\.keys bereitstellen

Hier ist ein Einzeiler, den Sie verwenden können, um die Vorteile zu nutzen.

$ curl -sL https://github.com/RichardBronosky.keys | while read; do echo -e "\nkey #$((++i)):"; ssh-keygen -E md5 -lf - <<<"$REPLY"; echo $REPLY; done

key #1:
2048 MD5:07:b4:00:a4:65:ef:44:89:05:84:60:0c:c9:b2:36:5e no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDJGT35gvsFveu+80qgurrLHId0h55E9jliM7Fo0mV9b7eg3EfyagkAcJUSMFkoov3HY4CW0yzOc7WlN57ABwvpRz1ioFDex0n0FkjoSEs5ROeT1OneRK6Bf6XnplgPuQ/LSSkv3kmK6I29R+YWi6TjDvLLoA5BrXJjOMfUv36jxWCDtk/5ZdhMZqhsMuDm06Jg5JBu6n5jQaZkmaIaunz7vOfwVG9LoCI+MYyIdo2S4VTva7Ee7jfAvgSUUgHTjhzsPO0/Ww5a/Kz2ehXW27aJxj/QPLfYR2LmTMbQKm3WpB8P1LjoiU7zjPoVoZ43a4P2JLUDidGKCd3eY5b5xewz

key #2:
2048 MD5:f7:98:f1:0b:73:c6:2a:21:00:7a:70:1d:0f:cf:d8:cc no comment (RSA)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCQsZrjwKjB4WnE4SwVdDX5eEMxKzPHFBVKKpo9vvWUXRQwdTZy6iVOkyF26IPR+xDPzslzXOClKXUrWEh6La/EMpRwuMrWAbMIJFeDHOb56q4azgopoJmMJHo0yxGu0Ts4XszMACYRhlG6uK2AP5SYiOTp1zKPFjazXAdwLXyOvJurzy6KKuGJdSs/sj9+4uehgyRNOhehCSfg71tJJYwRvO2DDfLgaVEKOgZx58gEnJfhhz9D7rbvdZNhw/hCgtVNJaQF9Mdke2OPwWSo8i0/XNb9Bu/GRXqwMZrxDBhyzieocW40cwuzxWfzoi03aISdtQ1HtawH8+/sswviM1+B
1
1
1
2017-11-26 04:32:06 +0000
ssh-keygen -r host.name.com

Gibt die Fingerabdrücke für alle konfigurierten öffentlichen Schlüssel auf einer sshd-Instanz aus.

Diese können dann in DNS SSHFP -Datensätzen abgelegt werden.