Bir RSA ortak / özel anahtar çiftinin eşleşip eşleşmediğini kontrol etme


71

İki dosyam var id_rsave id_rsa.pub. Geçerli bir çift olduklarını doğrulamak için hangi komut kullanılabilir ?


Michuelnik'in cevabını onaylayacağım; Beni yeni bir anahtar çifti yapmaktan kurtardı, teşekkürler. ssh -vçok da yardımcı olur.
Chris K

Yanıtlar:


91

Herkese açık / özel bir DSA anahtar takımını nasıl test edersiniz? Şeklindekissh-keygen -y -e -f <private key> kabul edilen cevap yerine yolu tercih ederdim. Yığın Taşması.

ssh-keygen -y -e -f <private key>özel bir anahtar alır ve doğrudan mevcut ortak anahtarlarınızla karşılaştırılabilecek ilgili ortak anahtarı yazdırır. (İpucu: Yorumlara veya önemli seçeneklere dikkat edin.)

(Bunu nasıl yapıyor? Sadece umumi anahtarın doğrudan veya dolaylı olarak özel anahtarda kodlanmasını umuyorum ...)

Buna kendim ihtiyacım vardı ve aşağıdaki Bash tek astarını kullandım. Anahtarlar birbirine aitse hiçbir şey vermemelidir. -qDiff komutuna biraz uygulayın ve diff sadece dönüş kodunu uygun şekilde ayarlar.

PRIVKEY=id_rsa
TESTKEY=id_rsa.pub
diff <( ssh-keygen -y -e -f "$PRIVKEY" ) <( ssh-keygen -y -e -f "$TESTKEY" )

1
@ MichaelHampton: şimdi yorumunuzu anlıyorum. "Kabul Cevap" stackoverflow olmasın soruya başvurmalıdır bu ... soru
Michuelnik

1
@Sirch: İki anahtarın eşit olmasından dolayı hangi anahtarın özel, hangisinin halka açık olduğuna kararın tamamen rastgele olduğunu düşündüm. Bir anahtarın şifrelediği şey yalnızca diğerinin şifresini çözebilir. Ve eğer bir anahtar diğerinden elde edilebildiyse, bunların hepsi işe yaramazdı.
Michuelnik

1
@Michuelnik Genel anahtarı özel anahtardan alabilirsiniz. Özel anahtarı genel anahtardan türetemezsiniz. Şifrelediği malzeme hakkında konuşmuyorlardı.
Efendim

1
@Michuelnik imho, soru burada konu dışı ve burada konu dışı (ve / veya Süper kullanıcı). imho, kopya olarak işaretlenmemeli ve bunun yerine geçiş için işaretlenmemelidir. Ancak her ikisinde de var, bu yüzden bilgi paylaşımının daha eksiksiz olmasını seviyorum.
Chris K,

10
İd_rsa.pub olduğu sürece, id_rsa'yı ssh-keygen -y -e -f id_rsahiç kontrol etmeyecek , ancak değeri id_rsa.pub'dan döndürecektir. Yani, eğer echo 5 > id_rsaözel anahtarı silerseniz, o zaman diff'i yapın, diff geçecektir! Ayrıca, ssh-keygen -yef foofoo'nun geçerli bir anahtar olmadığı durumlarda (ve buna karşılık gelen hiçbir foo.pub bulunmuyorsa), kullanıcı girdisini beklemeyi engeller, bu nedenle komut dosyasında kullanmaya dikkat edin.

31

Test ettiğiniz ortak anahtar dosyasını nereden aldığınıza bağlı olarak, kabul edilen cevap yanlış pozitif sonuç verebilir. Bunun nedeni yorumunda @drewbenn tarafından açıklanan davranış. Özellikle, -e seçeneği -f seçenek parametresi olarak özel anahtar dosyasıyla kullanıldığında, ilgili ortak anahtar dosyasındakileri basitçe papağanlar (ancak yeniden biçimlendirir).

Başka bir deyişle,

ssh-keygen -y -f id_rsa

(görünüşe göre) ortak anahtar değerini üretir ve

ssh-keygen -y -e -f id_rsa

basitçe ve varolan id_rsa.pub içindeki anahtarı ne olursa olsun çıktılar (ve yeniden biçimlendirir) .

Benim durumumda, çiftin bozulmadığını doğrulamam gerekiyor. Böylece, aşağıdakileri karşılaştırmaya karar verdim:

ssh-keygen -y -f id_rsa | cut -d' ' -f 2

ile

cut -d' ' -f 2 id_rsa.pub

Bu nedenle:

diff <(cut -d' ' -f 2 id_rsa.pub) <(ssh-keygen -y -f id_rsa | cut -d' ' -f 2)

Belki de bu kadar esnek değildir, ancak ihtiyaçlarım için daha iyidir. Belki başka birine yardım eder.


5
Bu gerçekten kabul edilen cevabı değiştirmeli ya da en azından abartı yönünden geçmelidir.
thomanski

Teşekkür ederim! Bu komut, parola içeren anahtarlarla çalışmaz, etkileşimli olarak sormaz. Two () komutunun içeriğini dosyalara çıkarttım ve çalıştım.
Yaroslav Nikitenko

5

Onlar yerel sisteminizde iseniz, sopa id_rsa.pubGözlerinde farklı $HOME/.ssh/authorized_keysve sshkarşı localhostkullanarak id_rsaanahtarı. İşe yararsa eşleşirler.

cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
ssh -i $HOME/.ssh/id_rsa localhost
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.