key_load_public: geçersiz biçim


98

Parola ile 4096 bitlik bir RSA-2 anahtarı oluşturmak için PuTTY Anahtar Oluşturucu kullandım.

.Ppk ve openSSL biçiminde bir genel anahtar kaydediyorum. Macun formatı genel anahtarı çalışmıyor.

Her durumda benim hatam şu şekildedir:

$ ssh -T git@github.com
key_load_public: invalid format
Enter passphrase for key '/c/Users/Dan/.ssh/id_rsa':
Hi Dan! You've successfully authenticated, but GitHub does not provide shell access.

Sorun ne?

Anahtarları yüklemek için Pageant kullanıyorum ve ssh bağlantısını denemek için Git Bash kullanıyorum. Ayrıca anahtarı GitHub'a yükledim, neyi yanlış yaptığımdan emin değilim.

GitHub'a yeni bir satır eklemeyi ve yeni bir satır eklememeyi denedim


Neden işe yaramadığını düşünüyorsun? Başarıyla doğrulandığını söylüyor .
Roland Smith

2
@RolandSmith Parolayı key_load_public: invalid formatgirmeden önce komutu çalıştırırken bana doğru mu diyor ?
ÜrdünGS

1
Yapın: 'ssh -vvv -T git@github.com', daha fazla bilgi almak için, muhtemelen ~ / .ssh / bilinen_hosts kötü - ssh, github'ın genel anahtarını arıyor. Anahtar dosyanın biçimini bulmak için 'dosya anahtarı'nı çalıştırabilirsiniz.
mosh

Yanıtlar:


182

Roland'ın cevaplarında belirttiği gibi , bu ssh-agent, genel anahtarın formatını anlamadığına ve o zaman bile, genel anahtarın yerel olarak kullanılmayacağına dair bir uyarıdır .

Bununla birlikte, uyarının neden orada olduğunu da ayrıntılandırabilir ve cevaplayabilirim. Basitçe, PuTTY Anahtar Üreticinin programda ne yaptığınıza bağlı olarak iki farklı genel anahtar biçimi oluşturduğu gerçeğine iniyor .

Not: Açıklamam boyunca, kullanacağım / oluşturacağım anahtar dosyalar id_rsauygun uzantılarıyla adlandırılacaktır . Ayrıca, kopyala-yapıştır kolaylığı için, anahtarların üst klasörünün olduğu varsayılacaktır ~/.ssh/. Bu ayrıntıları ihtiyaçlarınıza göre istediğiniz şekilde ayarlayın.

Biçimler

İlgili PuTTY belgelerine bağlantı

SSH-2

Ne zaman tasarrufu kullanarak bir anahtar PuTTY Key Generator "Kaydet genel anahtar" düğmesini kullanarak, bu tanımlanan formatta kaydedilir RFC 4716 .

Misal:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "github-example-key"
AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYF
i2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcp
pY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3
oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEA
ip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9
tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw==
---- END SSH2 PUBLIC KEY ----

OpenSSH

Yaygın inancın aksine, bu format jeneratör tarafından kaydedilmez. Ancak oluşturulur ve "OpenSSH yetkili_keys dosyasına yapıştırmak için genel anahtar" başlıklı metin kutusunda gösterilir. Bir dosya olarak kaydetmek için, metin kutusundan manuel olarak kopyalamanız ve yeni bir metin dosyasına yapıştırmanız gerekir.

Yukarıda gösterilen anahtar için bu şöyle olacaktır:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5EwgnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8DGm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElw== github-example-key

Anahtarın biçimi basittir ssh-rsa <signature> <comment>ve SSH-2 formatlı dosya yeniden düzenlenerek oluşturulabilir.

Genel Anahtarları Yeniden Oluşturma

Eğer yararlanıyorsanız, ssh-agentmuhtemelen erişiminiz de olacaktır ssh-keygen.

OpenSSH Özel Anahtarınız ( id_rsadosya) varsa, aşağıdakileri kullanarak OpenSSH Genel Anahtar Dosyasını oluşturabilirsiniz:

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Yalnızca PUTTY Özel Anahtarına ( id_rsa.ppkdosya) sahipseniz, önce onu dönüştürmeniz gerekir.

  1. PuTTY Anahtar Oluşturucuyu açın
  2. Menü çubuğunda "Dosya"> "Özel anahtarı yükle" yi tıklayın
  3. id_rsa.ppkDosyanızı seçin
  4. Menü çubuğunda "Dönüşümler"> "OpenSSH Anahtarını Dışa Aktar" ı tıklayın.
  5. Dosyayı farklı kaydedin id_rsa(uzantı olmadan)

Artık bir OpenSSH Özel Anahtarınız ssh-keygenolduğuna göre, anahtar üzerinde işlem yapmak için yukarıdaki aracı kullanabilirsiniz .

Bonus: PKCS # 1 PEM kodlu Genel Anahtar Biçimi

Dürüst olmak gerekirse, ihtiyacım olmadığından bu anahtarın ne için kullanıldığını bilmiyorum. Ama yıllar boyunca derlediğim notlarımda var ve sağlıklı bir iyilik için buraya dahil edeceğim. Dosya şöyle görünecek:

-----BEGIN RSA PUBLIC KEY-----
MIIBCAKCAQEAhl/CNy9wI1GVdiHAJQV0CkHnMEqW7+Si9WYFi2fSBrsGcmqeb5Ew
gnhmTcPgtM5ptGBjUZR84nxjZ8SPmnLDiDyHDPIsmwLBHxcppY0fhRSGtWL5fT8D
Gm9EfXaO1QN8c31VU/IkD8niWA6NmHNE1qEqpph3DznVzIm3oMrongEjGw7sDP48
ZTZp2saYVAKEEuGC1YYcQ1g20yESzo7aP70ZeHmQqI9nTyEAip3mL20+qHNsHfW8
hJAchaUN8CwNQABJaOozYijiIUgdbtSTMRDYPi7fjhgB3bA9tBjh7cOyuU/c4M4D
6o2mAVYdLAWMBkSoLG8Oel6TCcfpO/nElwIBJQ==
-----END RSA PUBLIC KEY-----

Bu dosya bir OpenSSH Özel Anahtarı kullanılarak (yukarıdaki "Genel Anahtarları Yeniden Oluşturma" bölümünde oluşturulmuş olduğu gibi) aşağıdakiler kullanılarak oluşturulabilir:

ssh-keygen -f ~/.ssh/id_rsa -y -e -m pem > ~/.ssh/id_rsa.pem

Alternatif olarak, aşağıdakileri kullanarak bir OpenSSH Genel Anahtarı kullanabilirsiniz:

ssh-keygen -f ~/.ssh/id_rsa.pub -e -m pem > ~/.ssh/id_rsa.pem

Referanslar:


Özel anahtarınızı bir OpenSSH anahtarına dönüştürdüğünüzde, bence dosyayı uzantısız bırakmanızı ve tercih edilmemesini tavsiye ederim. Git-istemcim, özel anahtar için bir uzantı kullanıldığında uzak depoya bağlanmıyor.
Programmer1994

@ Programmer1994 Dönüştürme talimatları, dosyayı .ppkbir .pubdosyaya dönüştürmek için adımlar olarak dahil edildi . Aracı id_rsaözel anahtarın aslında başka bir program tarafından kullanılmasının yan etkisi göz ardı edildi. Herhangi bir belirsizliği gidermek için "tercihen uzantısız" dilini "(uzantısız)" olarak değiştirdim. Ayrıca bu yanıta geri dönüp baktığımda ortaya çıkan bazı şikayetleri yeniden ifade etme şansını da buldum. Katkınız için teşekkürler.
samthecodingman

Cevap için teşekkürler. Cevabınızın "Genel Anahtarları Yeniden Oluşturma" bölümündeki komutu kullandım ve bu benim sorunumu çözdü.
desmond13

genel anahtarlardan bahsettin. ancak sorun, id_rsa özel anahtarından üretilir. Bir git sunucusuna ssh aracılığıyla erişmeye çalışırken özel ssh anahtarımı kullandığımda da aynı uyarıyı alıyorum.
ahnbizcad

5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubbu onu çözdü. TEŞEKKÜRLER!
Dwza

15

Macun aletini kurabilir ve kullanabilirseniz basit bir çözüm var. Adımlar aşağıdadır. Özel anahtarın parolasına sahip olmalısınız.

1. adım: En son macun ve macunu açın

2. adım: Mevcut özel anahtar dosyanızı yükleyin, aşağıdaki resme bakın

Mevcut bir özel anahtarı yükle

3. adım: Sorulursa anahtar parolasını girin ve tamam'a basın

parola girin

4. adım: aşağıdaki resimde gösterildiği gibi "dönüştürme" menü sekmesini seçin ve "OpenSSH anahtarını dışa aktar" ı seçin

OpenSSH dosyasını kaydet

Yeni özel anahtar dosyasını tercih ettiğiniz konuma kaydedin ve buna göre kullanın.


2
load pubkey invalid formatAnahtarı Export OpenSSH anahtarıyla dışa aktardığımda uyarı aldım . Export OpenSSH anahtarını kullanırken kayboldu (yeni dosya formatını zorla) .
elsamuko

Linux'ta apt install putty-toolsveya yum install puttysonrasudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel

8

TL; DR: ayrıca id_rsa.pubascii / UTF-8'de olduğundan emin olun .

Aynı sorunu yaşadım, ancak ek, gözden kaçması kolay bir sorun olan metin kodlaması nedeniyle kabul edilen yanıt tek başına işe yaramadı.

Koştuğum zaman

ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub

Windows PowerShell'de, bu çıktı kaydeder id_rsa.pubiçinde UTF-16 LE BOM kodlama değil de UTF-8 . Bu, BOM olmadan UTF-8'de bir dosya yazmak için PowerShell'i kullanma bölümünde tartışılan bazı PowerShell kurulumlarının bir özelliğidir . Görünüşe göre, OpenSSH eski metin kodlamasını tanımıyor ve aynı hatayı veriyor:

key_load_public: invalid format

Çıktısını kopyalayıp ssh-keygen -f ~/.ssh/id_rsa -ybir metin düzenleyiciye yapıştırmak, bunu çözmenin en basit yoludur.

Not: Bu , kabul edilen cevaba bir ekleme olabilir , ancak burada yorum yapmak için henüz yeterli karmam yok.


1
Keşfeddiğiniz gibi, borular Powershell'de farklı çalışır. Onun ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pubyerine kullanırsın.
samthecodingman

7

Genel anahtarınızı pano ile kopyalayıp yapıştırmanız durumunda, yeni satırı içeren genel anahtar dizesi kırılabilir.

Açık anahtar dizenizin tek satır olarak oluşturulduğundan emin olun.


5

Görünüşe göre sshgenel anahtarınızı okuyamıyor. Ama bu önemli değil.

Eğer yüklemek ortak anahtarı github için, ancak kullanarak kimlik doğrulaması özel anahtarı . Örneğin, içindeki DOSYALAR bölümüne bakın ssh(1).


2
Kısaca, putty key gen'e gidin, dönüşümleri tıklayın -> ssh anahtarını açın ve bunu id_rsa'ya kaydedin - HOME env değişkeninizin bakmakta olduğunuz .ssh klasörünü gösterdiğinden emin olun, id_rsa dosyasının diğer tüm kopyalarını sisteminizden silin
Kalpesh Soni

2

Doğrudan özel anahtarı kaydetmek yerine Dönüşümlere Git ve SSh Anahtarını Dışa Aktar. Aynı sorunu yaşadım ve bu benim için çalıştı


1

Ben de aynı uyarıyı aldım. Çok eski bir anahtardı. Mevcut OpenSSH 7'de bir anahtar oluşturdum ve hata ortadan kalktı.


1

Hata yanıltıcıdır - pubkeybir özel anahtar dosyasına işaret ederken " " diyor ~/.ssh/id_rsa.

Benim durumumda, sadece eksik bir genel anahtardı (bir kasadan geri yüklemediğim için).


DETAYLAR

~/.ssh/id_rsa.pubOtomatik betiklerle dağıtımı atlardım.

Tüm sshkullanımlar işe yaradı, ancak hata beni olası bir karışıklık düşündürdü.

Hiç de değil - stracetetikleyicinin aslında *.pubdosya olduğunu fark etmemize yardımcı oldu :

strace ssh example.com
...
openat(AT_FDCWD, "/home/uvsmtid/.ssh/id_rsa.pub", O_RDONLY) = -1 ENOENT (No such file or directory)
...
write(2, "load pubkey \"/home/uvsmtid/.ssh/"..., 57) = 57
load pubkey "/home/uvsmtid/.ssh/id_rsa": invalid format

0

Yani, güncellemeden sonra aynı sorunu yaşadım. key_fileUzantısı olmayan PEM kullanıyordum ve .pemsorunumu çözdüm. Şimdi dosya key_file.pem.


0

Yerleşik SSH ile Windows 10 kullanıyorsanız, Ağustos 2020 itibariyle yalnızca ed25519 anahtarlarını destekler. key_load_public: invalid formatÖrneğin bir RSA anahtarı kullanırsanız , hatayı alırsınız .

Gereğince bu GitHub konuyla bir çözüm sadece gemiye güncelleme beklemektir Bu yüzden 2020 yılında, Windows Update aracılığıyla biraz zaman sabit olmalıdır.

Bekleyemiyorsanız, geçici bir çözüm yeni bir ed25519 anahtarı oluşturmaktır, bu yine de iyi bir tavsiye .

> ssh-keygen -o -a 100 -t ed25519

Örneğin github ile kullanabilirsiniz, ancak bazı eski sistemler bu yeni biçimi desteklemeyebilir.

Anahtarınızı oluşturduktan sonra, aşağıdaki özelliklerden herhangi birini kullanıyorsanız, güncellemeyi unutmayın!

  1. ~\.ssh\config yine de eski anahtara işaret edebilir.
  2. Yeni anahtarı ssh-agent'a ssh-addkomut aracılığıyla ekleyin
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.