RSA anahtar parmak izini hesaplama


903

GitHub için SSH anahtar denetimi yapmam gerekiyor, ancak RSA anahtar parmak izimi nasıl bulacağımdan emin değilim. Başlangıçta Linux'ta bir SSH anahtarı oluşturmak için bir rehber izledim.

Mevcut RSA anahtar parmak izimi bulmak için girmem gereken komut nedir?


21
FWIW, ben bu yazı için geri gelmesini sağlayacak çünkü ben tuşları üzerinde parmak izi görmek ve eminim ı karşılık gelen özel anahtarı kullanıyorum yapmak istediğiniz github olduğunu. belki de gelmez bu yazının altında, o github-ilişkili soruşturma yardımcı beri bir github etiketi garanti?
hamx0r

4
@ hamx0r Gitlab bu parmak izlerini kullandığı için bu gönderiye geri döndüm ...
Ray Foss

1
Onu da kullanan Travis yüzünden geldim. : D
Per Lundberg

4
"Bu sayfaya geri dönmeye devam eden" Linux kullanan herkes için bunu bashrc'nize kopyalayın: function fingerprint() { ssh-keygen -lf $1 -E md5 }Sonra (bashrc'yi kaynakladıktan sonra) ile bir parmak izi alabilirsinizfingerprint ~/.ssh/key_file
Jeff Diederiks 14:18

1
@JeffDiederiks işlevini deneyen ve neden çalışmadığını merak edenler için Bash işlevlerinin ;vücutta bir izlemeye ihtiyacı var , function fingerprint() { ssh-keygen -lf $1 -E md5; }bunun yerine kullanın.
tjjfvi

Yanıtlar:


1261

SSH anahtarınızın SHA256 parmak izini almak için aşağıdaki komutu çalıştırın ( -lyeni bir anahtar oluşturmak yerine "liste" -fanlamına gelir, "dosya adı" anlamına gelir):

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

Örneğin, makinemde çalıştırdığım komut (RSA genel anahtarını kullanarak) idi:

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

GitHub (MD5) parmak izi biçimini daha yeni ssh-keygen sürümleriyle almak için şunu çalıştırın:

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

Bonus bilgileri:

ssh-keygen -lf ayrıca üzerinde çalışır known_hostsve authorized_keysdosyalar .

Linux / Unix / OS X sistemlerindeki çoğu ortak anahtarı bulmak için,

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

(Diğer kullanıcıların evlerinin içinde görmek istiyorsanız, kök veya sudo olmanız gerekir.)

ssh-add -lÇok benzer, ancak ajan ilave anahtarların parmak izlerini listeler. (OS X kullanıcıları, Keychain aracılığıyla sihirli şifresiz SSH'nin ssh-agent kullanmakla aynı olmadığını unutmayın.)


5
Yolun ne olduğunu nasıl bulabilirim?
pal4life

4
Örnek onaltılık parmak iziniz 32 basamak olduğundan, bunun MD5 parmak izi olacağına inanıyorum, değil mi?
SHA1'i

8
Ubuntu olmayan sistemlerde, ilgili dosya / etc / ssh içinde olabilir, örneğin /etc/ssh/ssh_host_rsa_key.pub
Zorawar

12
Parmak izinin genel / özel bir anahtar çiftindeki her iki anahtar için de aynı olması gerektiğini belirtmek gerekir; bu yüzden parmak izi, parmak izi ile .ssh/id_rsaaynı olmalıdır .ssh/id_rsa.pub. Yani, ikisinden birini kullanabilirsiniz (ve benim gibi ve sekme tamamlamayı seviyorsanız, işin daha az 2 tuşa basmasını sağlar. Verimlilik!).
Part Atışı

25
ssh-keygen -E md5 -lf ~/.ssh/id_rsa.pubstandart sha256 çıktısını istemiyorsanız kullanın
user8162

675

Daha yeni SSH komutları parmak izlerini SHA256 olarak listeleyecektir Anahtarı .

Örneğin:

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

Eski bir parmak iziyle karşılaştırmanız gerekiyorsa, MD5 parmak izi karma işlevini de kullanmanız gerekir .

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)

Ayrıca mevcut: -E sha1

Güncelleme ... EVET ... evet ... Biliyorum ... SSH için DSA anahtarları artık kullanılmamalıdır, bunun yerine eski RSA anahtarı veya daha yeni ekliptik anahtarlar kullanılmalıdır.

Yukarıda kullandığım komutu düzenlemeye devam eden 'yöneticilere'. DEĞİŞTİRMEYİ DUR! Komutu ve sonuçta ortaya çıkan çıkışı yanlış eşleştiriyorsunuz!


6
Burada, bu yanıtta belirtildiği gibi ssh, sunucunun eski MD5 parmak izini kullanarak göstermenizi söyleyebilmeniz gerekir . (Sadece bunu arıyordum ve bu cevap beni bu soruya yönlendirdi, bu yüzden başkalarının da benzer bir deneyim yaşayabileceğini düşünüyorum.)ssh -o FingerprintHash=md5 example.org
Jonathan Y.

25
Bu cevap, anahtarlarını github.com'un gösterdiği şeylerle (yani onaltılık olarak biçimlendirilmiş MD5) karşılaştırmak isteyenler için en yararlıdır
hamx0r

2
Ayrıca ne macun rapor hangi ile karşılaştırma için çok yararlı.
pjcard

27

Anahtarınızı Ubuntu'da görmek için terminalinize şu komutu girin:

ssh-add -l

Bunun gibi bir çıktı alırsınız: 2568 0j:20:4b:88:a7:9t:wd:19:f0:d4:4y:9g:27:cf:97:23yourName @ ubuntu (RSA)

Ancak şöyle bir hata alırsanız; Could not open a connection to your authentication agent.
O zaman ssh-agent'ın çalışmadığı anlamına gelir. ssh-agent bashBaşlatabilir / çalıştırabilirsiniz: (yorumlardaki @Richard sayesinde) ve ardından yeniden çalıştırınssh-add -l


5
Ubuntu'da değilseniz bunu maalesef "Kimlik doğrulama aracınızla bağlantı açılamadı" alabilirsiniz.
rogerdpack

1
Bu, yalnızca kimlik doğrulama aracısı çalışıyorsa çalışır.
Rufflewind

Kimlik doğrulama aracısını çalıştırmak için kullanabilirsiniz ssh-agent bashve hayata devam edebilirsiniz . Hayatta her zamanki gibi; ssh-agenttüm sistemlerde tutarlı bir uygulama olarak garanti edilmez.
Richard Kenneth Niescior

Linux için başka bir ipucu; Ssh-keygen-g3'ün -F (döküm parmak izi) seçeneği anahtarın parmak izini görüntüler: $ ssh-keygen-g3 -F /path/to/keyfile.pub answer.ssh.com/questions/494/…
AnneTheAgile

18

Bir anahtar çifti (özel ve genel anahtarlar) aynı parmak izine sahip olacaktır; bu yüzden hangi özel anahtarın hangi ortak anahtara ait olduğunu hatırlayamıyorsanız, parmak izlerini karşılaştırarak eşleşmeyi bulun.

Marvin Vinto'nun en çok oy alan yanıtı, genel bir SSH anahtar dosyasının parmak izini sağlıyor . İlgili özel SSH anahtarının parmak izi de sorgulanabilir, ancak aşağıda gösterildiği gibi daha uzun bir adım dizisi gerektirir.

  1. Eğer yapmadıysanız, SSH ajanını yükleyin. En kolay yol,

    $ ssh-agent bash
    

    veya

    $ ssh-agent tcsh
    

    (veya kullandığınız başka bir kabuk).

  2. Test etmek istediğiniz özel anahtarı yükleyin:

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

    Anahtar parola korumalıysa parolayı girmeniz istenir.

  3. Şimdi, diğerlerinin söylediği gibi,

    $ 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:...peşinde olduğunuz parmak izi. Birden fazla anahtar varsa, birden çok satır yazdırılır ve son satırda son yüklenen anahtarın parmak izi bulunur.

  4. Aracıyı durdurmak istiyorsanız (yani, yukarıdaki 1. adımı çağırdıysanız), kabuğa `` exit '' yazmanız yeterlidir ve ssh aracısının yüklenmesinden önce kabuğa geri dönersiniz.

Yeni bilgi eklemiyorum, ancak umarım bu cevap her seviyedeki kullanıcı için açıktır.


İlk paragraf doğru değildir ssh-add -lve ssh-keygen -lbelirli bir anahtar çifti için aynı parmak izini döndürür. Ayrıca, -lbüyük harf değil, küçük harf olmalıdır .
Albertas Agejevas

Buna itiraz etmiyorum ssh-add -lve ssh-keygen -lbelirli bir anahtar çifti için aynı parmak izini döndürmüyorum. Ancak ilk paragraftaki orijinal beyanlarımda neyin yanlış olduğunu anlamıyorum. Açıklığa kavuşturmak için bir cümle ekledim.
Wirawan Purwanto

1
Aracıyı başlatmak yerine ssh-keygen'i bir anahtara yönlendirmek, sonra anahtarı yüklemek, sonra parmak izini almak sadece basittir.
Albertas Agejevas

1
Yalnızca özel anahtarınız varsa, çalıştırmanız gerekmez ssh-agent. PRIVKEYÖzel anahtar dosyasına PUBKEYayarlandığını ve (başlangıçta var olmayan) ortak anahtar dosyasına ayarlandığını varsayarsak , ssh-keygen -y -f "${PRIVKEY}" > "${PUBKEY}"SSH genel anahtarını yeniden oluşturmak ssh-keygen -E md5 -l -v -f "${PUBKEY}"için MD5 karma ssh-keygen -l -v -f "${PUBKEY}"değerini istiyorsanız veya yalnızca SHA-256 karma değerini istiyorsanız (SHA-256 şu anda varsayılan değerdir).
David Tonhofer

12

Anahtarlarınız bir SSH aracısındaysa en hızlı yol:

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

Aracıdaki her anahtar şu şekilde yazdırılacaktır:

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
Anahtarlarımı GitHub hesabımdakilerle eşleştirmenin daha hızlı bir yoluna ihtiyacım vardı ve bu cevap tam da bunu yapmama yardımcı oldu.
evanjs

11

Burada AWS forumlarından içerik çoğaltma , çünkü kullanım durumum için yararlı buldum - Hangi anahtarlarımdan hangilerinin AWS'ye içe aktardığımla eşleştiğini kontrol etmek istedim

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

Nerede: - primary.pemkontrol edilecek özel anahtar


9
$ ssh-add -l 

Mac OS Xv10.8 (Mountain Lion) - v10.10 (Yosemite) üzerinde de çalışacak .

Ayrıca -Eparmak izi biçimini belirleme seçeneğini de destekler, böylece MD5 gerektiğinde (genellikle GitHub tarafından kullanılır), sadece -E md5komuta ekleyin .


En basit cevap için +1. Gönderen man ssh-addseçeneği -l"Tüm kimliklerin Listeleri parmak izleri halen ajan tarafından temsil edilen" dır
XavierStuvw

8

Windows'ta PuTTY / Pageant kullanıyorsanız, PuTTY (.ppk) anahtarınızı Pageant'a yüklediğinizde parmak izi listelenir. Hangisini kullandığınızı unutmanız durumunda oldukça kullanışlıdır.

Resim açıklamasını buraya girin


3
Teşekkür ederiz, Bazen biz Linux insanları pencereleri unutuyoruz, özellikle de OP'nin macundan bahsettiği gibi.
17'de Jmons

@ DmitriR117 neden tüm dünyada bilinebileceği için siyah ortak anahtarı boyadınız?
Michu93

8

Bu, DigitalOcean damlacıkları oluşturmak için SSH anahtar parmağımı yazdırmak için kullandığım kabuk işlevidir :

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

İçine koyun ~/.bashrc, kaynak yapın ve ardından parmak izini şu şekilde alabilirsiniz:

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

2

SSH temsilciniz çalışıyorsa,

ssh-add -l

tüm kimliklerin RSA parmak izlerini listelemek veya -L listelemek ortak anahtarları listelemek için.

Aracınız çalışmıyorsa şunu deneyin:

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

Ve genel anahtarlarınız için:

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

Şu mesajı alırsanız: ' Temsilcinin kimliği yok. ', önce RSA anahtarınızı oluşturmanız gerekir ssh-keygen.


Openssh yükledim, sonra macun kullanarak sunucuya bağlanmaya çalıştım. Bir ssh-ed25519 256 anahtar parmak izi sunuyor, ancak "kimlik yok" mesajı alıyorum. Bu anahtarın nerede bulunabileceğini ve listelendiğini biliyor musunuz? Bu anahtarı kullanmanın yeni bir RSA anahtarı üretmenin bir dezavantajı var mı?
lordcheeto

Altında buldum /etc/ssh/ssh_host_ed25519_key.pub. Sorunun ikinci kısmı kalır: bu otomatik oluşturulan anahtar kullanmanın bir dezavantajı var mı?
lordcheeto

1

Bazen ~/.sshdizininizde bir sürü anahtar olabilir ve GitHub / Gitlab / etc tarafından gösterilen parmak iziyle hangisinin eşleştiğini bilmiyorsunuz.

Dizininizdeki tüm tuşların temel dosya adlarını ve MD5 parmak izlerini nasıl göstereceğiniz aşağıda açıklanmıştır ~/.ssh:

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

(Parametrelerin anlamı için findkomut hakkındaki bu cevaba bakınız .

Bir anahtara ait özel / genel dosyaların aynı parmak izine sahip olduğunu unutmayın, böylece kopyalar görürsünüz.


0

Google Compute Engine, SSH ana bilgisayar anahtarı parmak izini bir Linux örneğinin seri çıktısında gösterir. API bu verileri GCE'den alabilir ve örnekte oturum açmaya gerek yoktur.

Seri çıktıdan başka bir yerde bulamadım. Parmak izinin daha programcı dostu bir yerde olması gerektiğini düşünüyorum.

Ancak, bir örneğin türüne bağlı olduğu görülmektedir. Debian 7 (Wheezy) f1-micro örneklerini kullanıyorum.


-1

İlk bağlantıdan önce uzak bir SSH sunucusunu kontrol etmek için www.server-stats.net/ssh/ adresine göz atabilirsiniz. için, sunucunun tüm SHH anahtarlarını ve anahtarın ne zaman bilindiğini görmek adresine .

Bu bir SSL sertifikası gibi değil, herhangi bir SSH sunucusuna ilk kez bağlanmadan önce mutlaka yapılması gereken bir şey.


4
Kullanıcı üçüncü taraf bir web sitesi değil, işletim sisteminin kendisinden bir komut satırı arıyor.
Andrew Barber

Yani, temel olarak yakınsama eklentisi , SSL yerine SSH hariç ve sadece bir (biraz iffy) noter ile. Bu doğru mu?
Part Atışı

-1

Fedora'da anahtarların @ olduğunu söyleyen [locate ~ / .ssh] yapıyorum

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

OP, anahtarlarını nerede bulacağını biliyor gibi görünüyor (Bu değil, ~/.ssh/id*.puböyle) ve parmak izlerini almak istiyor.
Gert van den Berg
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.