SSH anahtar parmak izi nedir ve nasıl üretilir?


128

Her zaman sshyeni bir makineye girdiğimde bu mesajı alıyorum :

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

Bu ne anlama geliyor? Her makine her seferinde aynı parmak izine sahip olacak mı?

Bu parmak izleri nasıl üretiliyor? Hangi parametrelere dayanırlar?

Yanıtlar:


65

Parmak izi, genellikle "/etc/ssh/ssh_host_rsa_key.pub" temelli olan ve genellikle bağlandığınız konağın kolay tanımlanması / doğrulanması için, Sunucunun Genel anahtarına dayanır.

Parmak izi değişirse, bağlandığınız makine genel tuşlarını değiştirdi. Bu kötü bir şey olmayabilir (ssh'nin yeniden kurulmasıyla olur), ancak aynı etki alanı / IP'deki farklı bir makineye bağlandığınızı (yük dengeleyici gibi bir şeyden bağlanırken olduğu gibi) veya saldırganın bir şekilde kullanıcı / pw'nizi çağırabilecek farklı bir ana bilgisayara bağlanmak için ssh bağlantınızı durdurduğu / yeniden yönlendirdiği ortadaki bir adam saldırısı ile hedef alınıyor.

Alt satır: Değişen parmak izi konusunda uyarılırsanız, dikkatli olun ve güvenli bir bağlantı üzerinden doğru ana bilgisayara bağlandığınızı iki kez kontrol edin. Bu çoğu zaman zararsız olsa da, potansiyel bir sorunun bir göstergesi olabilir

Bakınız: http://www.lysium.de/blog/index.php?/archives/186-How-to-get-ssh-server-fingerprint-information.html
ve: http://en.wikipedia.org/ wiki / Public_key_fingerprint


5
"... dikkatli olun ve güvenli bir bağlantı üzerinden doğru ana bilgisayara bağlandığınızı bir kez daha kontrol edin" - aptalca soru, ama bunu nasıl kolayca yapabilirsiniz?
Savara

1
@Savara Daha önce bağlamadığınız bir SSH sunucusuna bağlanırken, sunucu yöneticisinden SSH sunucusunun genel anahtarını istemeniz gerekir. Sunucu yöneticisi size bir parça metin verecektir. Bu metni dosyaya eklemelisiniz ~/.ssh/known_hosts. Bu şekilde, sunucuya bağlandığınızda, genel anahtarını kaydettiğinizden beri SSH istemciniz bu sunucuyu tanıyacaktır known_hosts. Dolayısıyla, aslında gerektiğini asla SSH istemcisi anlatır ne zaman "evet" "konak otantisitesinden edilemez" derler. Her zaman önce sunucunun ortak anahtarını eklemelisiniz.
Utku

@ Savara Eğer bunu yaparsanız, SSH müşteriniz size "Müşterinin gerçekliği kurulamaz" deyince ya da "Sunucunun genel anahtarı değiştirildi" deyince akılda kalıcı bir şey olduğunu bileceksiniz. Dolayısıyla, her zaman için sunucunun ortak anahtarı eklemek gerekir ~/.ssh/known_hostsönceden dosya ve asla söylemek SSH istemcisi anlatır ne zaman evet "istemci otantisitesinden edilemez" veya anlatır ne zaman "sunucunun genel anahtar olmuştur değiştirilen".
Utku

3
Evet, SSH parmak izlerini izleme mekanizmasının nasıl çalıştığının tam olarak farkındayım, ancak zamanın büyük bir yüzdesinde parmak izini başka bir kanaldan alma seçeneğiniz yok. TOFU ne yazık ki sık sık aldığımız en iyisidir.
Savara

"Evet" i cevapladıktan sonra bile orijinalliği kontrol etmenin bir yolu var mı?
değiş

104

Şunu ssh-keygengibi kullanarak bir ortak anahtar için parmak izi oluşturabilirsiniz :

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

Somut örnek (eğer bir RSA ortak anahtarı kullanıyorsanız):

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

İlk bölüm (2048)bit cinsinden anahtar uzunluğu, ikinci bölüm (00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff)genel anahtarın parmak izi ve üçüncü bölüm genel anahtar dosyasının kendisinin olduğu yerdir.


12: f8: 7e: 78: 61: b4: bf: e2: de: 24: 15: 96: 4e: d4: 72: 53'e bu genel anahtardan nasıl çevrileceğini biliyor musunuz?
Kit Ho,

@KitHo Sorunuzu anladığımdan emin değilim. İstediğiniz ssh-keygen -lfşeyi yapacağını düşündüğümden örneği güncelledim .
Benjamin Oakes

5
Yeni bir makineye SSH-ing zaman ne gördüğü olduğu değil , kullanıcının pubkey parmak izi, ama konağın pubkey parmak izi. Dolayısıyla, sorunun bağlamı için daha iyi bir örnek ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub. Ayrıca SSH girişlerinde localhost'a gösterilen parmak izini gösterir.
tanius

57
Benim ssh-keygenbildirildi sha256parmak izi yok. md5Parmak izlerini almak için koştum ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub. #archlinux
Justin C,

5
(@JustinC) OpenSSH sürüm 6.8 (Mart 2015) ve üstü, varsayılan olarak hex yerine base64'te görüntülenen SHA256 olarak değiştirildi. İstemci kullanımı için ssh -o FingerprintHash=md5veya benzerini ssh_configkullanan şeylerin içinde ve üzerinde . sshscp
dave_thompson_085 12:16

72

Parmak izi, Base64 kodlu ortak anahtar içindeki ikili veri üzerindeki MD5'tir.

$ 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, anahtar üretildiğinde, yalnızca ayırıcı sütunlar olmadan görüntülenen parmak izidir.


Ancak, Amazon'un EC2 Anahtar Çiftleri konsolunda gösterdiği parmak izleriyle uğraşıyorsanız, ne yazık ki bu farklı bir canavar olabilir . 32 basamaklı altıgen bir dize ise, yukarıdaki standart MD5 SSH açık anahtar parmak izidir. Ancak, 40 onaltılık basamak ise, özel anahtarın SHA1'ini PKCS # 8 biçiminde alarak hesaplanan bir parmak izidir :

$ 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

1
Bu cevabı aşağıdaki senaryoda faydalı buldum. Sisteminiz parmak izi hesaplamak için SHA1 kullanıyor, ancak arkadaşınızın md5 kullanıyor. SHA1 olan bir parmak izi paylaştım ve sistemi tarafından üretilen MD5 ile eşleşmiyordu. Bu yardımcı oldu - teşekkür ederim! sed 's | ^ ssh-rsa ||' /etc/ssh/ssh_host_rsa_key.pub | sed 's | ==. * $ | == |' | base64 -d | md5sum
Liczyrzepa

SHA-1 veya SHA-256 özeti kullandıkları için bu parmak izinin neden DNS SSHFP kayıtlarındakilerle eşleşmeyeceğini anlamak oldukça önemlidir.
neirbowj

1
@Liczyrzepa publickey alanı, anahtar türüne ve bit değerine bağlı olarak sonunda '==' olabilir veya olmayabilir; daha güvenli ve IMO kullanımı kolay awk '{print $2}' /path/to/keyfile.pubveya benzeri.
dave_thompson_085 12:16

13
Parmak izinin nasıl hesaplandığını açıklayan tek cevap bu
greuze

2
Ancak Linux cat id_rsa.pub | cut -d' ' -f2 | base64 -d | md5sum
Mint'te

13

Bir SSH anahtar dosyasını kontrol etmek istiyorsanız, github tarafından "Dağıtma anahtarı" ile bildirilenle aynı olup olmadığını kontrol etmek istiyorsanız, bu tam size göre ...

Özel URL’den: https://github.com/<username>/<repo_name>/settings/keys ekran görüntüsü github

Terminalde:

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

Hem özel hem de genel anahtarlar için aynı parmak izini aldığınızı fark edeceksiniz.

Aynı komut, https://github.com/<username>.

İşte bundan yararlanmak için kullanabileceğiniz bir astar.

$ 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
ssh-keygen -r host.name.com

Bir sshd örneğinde yapılandırılmış tüm ortak anahtarların parmak izlerini verir.

Bunlar daha sonra DNS SSHFP kayıtlarına konulabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.