PEM ssh anahtarının parmak izi


30

Çalışan bir ssh-agent'a eklediğim bir PEM dosyam var:

$ file query.pem
query.pem: PEM RSA private key

$ ssh-add ./query.pem
Identity added: ./query.pem (./query.pem)

$ ssh-add -l | grep query
2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA)

Anahtarın parmak izini (ssh-agent'ta gördüğüm) doğrudan dosyadan nasıl alabilirim? ssh-keygen -l -f some_key"Normal" ssh tuşları için çalıştığını biliyorum ama PEM dosyaları için değil.

.Pem dosyasında ssh-keygen'i denersem, şunu alıyorum:

$ ssh-keygen -l -f ./query.pem                                             
key_read: uudecode PRIVATE KEY----- failed
key_read: uudecode PRIVATE KEY----- failed
./query.pem is not a public key file.

Bu anahtar ile başlar:

-----BEGIN RSA PRIVATE KEY-----
MIIEp.... etc.

gibi görünen "normal" bir özel anahtara karşı:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,E15F2.... etc.

Neden PEM dosyalarında çalışmadığını düşünüyorsunuz? Deneyince ne hata alıyorsun? .ssh/id_rsaTüm varsayılanları kullanarak OpenSSH tarafından oluşturulan bir dosya IS PEM dosyasıdır. Özel anahtarlar varsayılan olarak PEM kodludur. Aslında OpenSSL ile oluşturduğunuz RSA anahtarlarını doğrudan OpenSSH ile kullanabilirsiniz.
Zoredache

.pem'deki ssh-keygen çıktısı ile güncellenmiş açıklaması
Bilinmiyor

(geç ama necroed) @Zoredache: 7.2'den önce (2016'da, bu Q'dan sonra) ssh-keygen -lprivatekey dosyasını okuyamaz, ancak diğer ssh-keygen(ve ssh*) işlemler de yapar. Ama ssh-keygen üreten bir anahtar o privatekey dosya örneğin hem yazıyor id_rsa ve bir tekabül eden publickey dosyası .pubeklendi ör id_rsa.pub. Daha eski ssh-keygen -l ,.pub belirttiğiniz dosya adına eklemeyi ve bu publickey dosyasını okumayı dener.
dave_thompson_085

Yanıtlar:


34

Kayıp ortak anahtar dosyanızın parmak izini almak istiyorsanız , özel anahtar dosyasından kurtarabilirsiniz :

$ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file

O zaman kamu parmak izini tespit edebiliyorsunuz:

$ ssh-keygen -lf path/to/store/public_key_file
2048 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host (RSA)

Bazı yeni sistemlerde bu, tuşun SHA256 parmak izini basar. Seçeneği kullanarak tuşun MD5 parmak izini (iki nokta şeklinde) yazdırabilirsiniz -E:

$ ssh-keygen -E md5 -lf path/to/store/public_key_file
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

Veya bir komut satırı olarak :

$ ssh-keygen -yf /etc/ssh/ssh_host_ecdsa_key | ssh-keygen -E md5 -lf -
2048 MD5:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@host (RSA)

@ MikeD'nin cevabı aslında OP'nin ne aradığı (ve ne aradığımı) için "doğru" cevaptır. AWS, parmak izini gösterdiği formatta, sütunlarla ayrılmış basamak çiftleriyle sağlar. Çözümü (verilen AWS sayfasından alınmıştır) aynı zamanda parmak izini de aynı şekilde üretmektedir, böylece doğru olarak doğrulayabilirsiniz.
Mike Williamson

50

AWS'nin " Anahtar Çiftinizin Parmak İzini Doğrulama ", anahtarınızın nasıl oluşturulduğuna bağlı olarak, sorunu çözen iki tek gömlek sağlar.

Anahtar çiftinizi AWS kullanarak oluşturduysanız:

$ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

Veya, anahtar çiftinizi bir üçüncü taraf aracıyla oluşturduysanız:

$ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c
writing RSA key
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

(parmak izleri yukarıdaki çıktıda yeniden düzenlenmiştir)


6

Burada, yerel olarak bir genel anahtar dosyası oluşturulmasını gerektirmeden istediğinizi yapması gereken bir astar bulunur.

$ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y )
2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA)

Bu , sadece dosya üzerinde çalışacak bir borudan ziyade <<<normal bir dosya ( /dev/stdin) olarak stdin'in mevcut olması için bash dizesini kullanır ssh-keygen.

İtibariyle Release openssh 7.2 ssh-keygen standart girdiden parmak izi desteklerden:

  • ssh-keygen (1): standart girdiden parmak izine izin ver, örneğin "ssh-keygen -lf -"

Bu komutun, parola kullanan ve bir aracı kullanmayan özel anahtarlarla kesileceğini unutmayın. Parola kullanmayan AWS veya OpenStack tarafından oluşturulan pem dosyalarıyla çalışmalıdır.

Daha fazla bilgi için https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin adresine bakın .


Sürüm notları söylemedi ancak 7.2'den itibaren kaynağa göre -layrıca bir privatekey dosyasını okumayı da destekliyor (ancak stdin'den değil ).
dave_thompson_085

2

Parmak izini özel anahtar dosyasından değil, genel anahtar dosyasından alamazsınız.

Aslında, ssh-keygen size zaten şunu söyledi:

./query.pem ortak bir anahtar dosyası değil.

Anahtarın genel yarısına karşı çalıştırın ve çalışması gerekir.

Daha genel olarak konuşmak

Bir düşünün: parmak izinin var olmasının nedeni, genel anahtarı tanımlayabilmenizdir. Aslında, özel anahtara sahip olmak, sunucuya faydasız kalmanın yanı sıra (söz konusu özel anahtara bile sahip olmayan) potansiyel bir güvenlik sorunudur.

Ortak anahtara sahip olduğunuzda, işlem müşterinin ilgili özel yarıda bir payı olduğunu doğrulamaktır. Hangi anahtarları doğrulamaya çalıştığınızı zaten bildiğinizden, parmak izinize gerek yoktur.


Sorun şu ki bu özel anahtar için ortak bir anahtarım yok :( Ve başka bir şey, ssh-keygenbaşlangıçta ekstra bilgiye sahip olan bir RSA özel anahtar dosyası üzerinde çalışıyor (ilk yazıma bakın), ancak bu konuda değil. .
Bilinmiyor

O zaman bu konuda yapabileceğin hiçbir şey yok. Özel bölümdeki anahtarın yarısını, tersini yapabileceğinizden daha fazla alamazsınız.
Stephane

3
Bu yanlış. @Ominug'un işaret ettiği gibi, ssh-keygen -yfbunu yapar.
Steve Bennett

4
@Stephane Saf bir RSA seviyesinde doğruysa, pratikte tuşların PKCS özelliğinde saklanma şekli özel tuşların formatı aslında her iki tuşu da içerir. Özel vs public
Håkan Lindqvist

“Anahtarın halkın yarısını özel bölümden alamazsınız ...” - oh evet, muhtemelen yapabilirsiniz. Modülü özel anahtardan alın ve ortak üs olarak 65537 kullanın ve olasılıkla ortak anahtarı buldunuz.
Jim
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.