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

Co to jest odcisk palca SSH i jak jest on generowany?

Zawsze stwierdzam, że otrzymuję tę wiadomość, gdy ssh do nowej maszyny:

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

Co to znaczy? Czy każda maszyna będzie miała za każdym razem ten sam odcisk palca?

Jak są generowane te odciski palców? Od jakich parametrów są one zależne?

Odpowiedzi (5)

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

Możesz wygenerować odcisk palca dla klucza publicznego używając ssh-keygen jak np.:

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

Konkretny przykład (jeśli używasz klucza publicznego 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)

Pierwsza część (2048) to długość klucza w bitach, druga część (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff) to odcisk palca klucza publicznego, trzecia część to lokalizacja samego pliku klucza publicznego.

W nowszych wersjach OpenSSH, zamiast szesnastkowego MD5, wyświetlany jest kod SHA-256 kodowany przez Base64. Aby pokazać starszy styl hash, użyj

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

Odcisk palca to MD5 nad danymi binarnymi w kluczu publicznym zakodowanym w Base64.

$ 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

Md5sum 6530389635564f6464e8e3a47d593e19 to odcisk palca wyświetlany podczas generowania klucza, tylko bez dwukropków rozdzielających.


Jednak jeśli masz do czynienia z odciskami palców, które Amazon pokazuje w konsoli EC2 Key Pairs niestety może to być inna bestia . Jeśli jest to 32-cyfrowy ciąg heksadecymalny, to jest to standardowy MD5 SSH z kluczem publicznym powyżej. Ale jeśli jest to 40 cyfr heksadecymalnych, to tak naprawdę jest to odcisk palca obliczony przez pobranie SHA1 klucza private w formacie PKCS#8:

$ 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

Odcisk palca jest oparty na kluczu publicznym gospodarza, zwykle na “/etc/ssh/ssh\_host_rsa_key.pub” Ogólnie rzecz biorąc, jest to łatwe do identyfikacji/weryfikacji gospodarza, z którym się łączysz.

Jeśli odcisk palca się zmieni, maszyna, z którą się łączysz, zmieniła swój klucz publiczny. To może nie być zła rzecz (zdarza się z ponowną instalacją ssh), ale może również wskazywać, że łączysz się z inną maszyną w tej samej domenie/IP (zdarza się, gdy łączysz się przez coś takiego jak load balancer) lub że jesteś celem ataku man-in-the-middle, gdzie atakujący w jakiś sposób przechwytuje/przekazuje połączenie ssh, aby połączyć się z innym hostem, który może być snooping użytkownika/pw.

Podsumowanie: jeśli zostaniesz ostrzeżony o zmianie odcisku palca, bądź ostrożny i sprawdź podwójnie, czy rzeczywiście łączysz się z właściwym hostem przez bezpieczne połączenie. Choć w większości przypadków jest to nieszkodliwe, może to być oznaką potencjalnego problemu

Zobacz: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html i: http://en.wikipedia.org/wiki/Public\_key_fingerprint

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

Jeśli chcesz sprawdzić, czy plik z kluczem SSH jest taki sam, jak ten zgłoszony przez githuba jako “Klucz wdrożeniowy”, to jest to dla Ciebie…

Z prywatnego adresu URL: https://github.com/\/<po_nazwa użytkownika>/settings/klucze zobaczysz

Na terminalu:

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

Zauważysz, że otrzymujesz ten sam odcisk palca zarówno dla kluczy prywatnych, jak i publicznych.

Ta sama komenda może być połączona z czystą funkcją GitHuba, którą jest fakt, że służą one publicznie do obsługi kluczy publicznych SSH użytkowników pod adresem https://github.com/\.key

Oto jednolinijka, którą możesz wykorzystać.

$ 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

Wyświetla odciski palców dla wszystkich skonfigurowanych kluczy publicznych na instancji sshd.

Można je następnie umieścić w rekordach DNS SSHFP .