key_load_public: format tidak valid

98

Saya menggunakan PuTTY Key Generator untuk menghasilkan kunci RSA-2 4096 bit dengan frasa sandi.

Saya menyimpan .ppk dan kunci publik format openSSL. Kunci publik format dempul tidak berfungsi.

Bagaimanapun, kesalahan saya adalah sebagai berikut:

$ ssh -T [email protected]
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.

apa masalahnya?

Saya menggunakan Pageant untuk memuat kunci dan saya menggunakan Git Bash untuk mencoba koneksi ssh. Saya juga telah memuat kunci tersebut ke GitHub, tidak yakin apa yang saya lakukan salah.

Saya sudah mencoba menambahkan baris baru dan tidak menambahkan baris baru di GitHub

JordanGS
sumber
Menurut Anda mengapa itu tidak berhasil? Ia mengatakan berhasil diautentikasi .
Roland Smith
2
@RolandSmith Ini memberitahu saya key_load_public: invalid formatbenar ketika saya menjalankan perintah sebelum saya memasukkan kata sandi?
JordanGS
1
Lakukan: 'ssh -vvv -T [email protected]' untuk mendapatkan info lebih lanjut, mungkin ~ / .ssh / known_hosts buruk - ssh sedang mencari kunci publik github. Anda dapat menjalankan 'file key' untuk mengetahui format file kunci.
mosh

Jawaban:

182

Seperti yang Roland sebutkan dalam jawaban mereka, ini adalah peringatan bahwa ssh-agenttidak memahami format kunci publik dan bahkan kemudian, kunci publik tidak akan digunakan secara lokal.

Namun demikian, saya juga bisa menjelaskan dan menjawab mengapa peringatan itu ada. Ini hanya bermuara pada fakta bahwa PuTTY Key Generator menghasilkan dua format kunci publik yang berbeda tergantung pada apa yang Anda lakukan dalam program.

Catatan: Sepanjang penjelasan saya, file kunci yang akan saya gunakan / buat akan diberi nama id_rsadengan ekstensi yang sesuai. Selanjutnya, untuk kenyamanan salin-tempel, folder induk dari kunci akan dianggap sebagai folder utama ~/.ssh/. Sesuaikan detail ini dengan kebutuhan Anda sesuai keinginan.

Format

Tautan ke dokumentasi PuTTY yang relevan

SSH-2

Saat Anda menyimpan kunci menggunakan PuTTY Key Generator menggunakan tombol "Simpan kunci publik", kunci tersebut akan disimpan dalam format yang ditentukan oleh RFC 4716 .

Contoh:

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

Berlawanan dengan kepercayaan populer, format ini tidak disimpan oleh generator. Namun itu dibuat dan ditampilkan di kotak teks berjudul "Kunci publik untuk ditempelkan ke file OpenSSH authorized_keys". Untuk menyimpannya sebagai file, Anda harus menyalinnya secara manual dari kotak teks dan menempelkannya ke file teks baru.

Untuk kunci yang ditunjukkan di atas, ini adalah:

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

Format kuncinya sederhana ssh-rsa <signature> <comment>dan dapat dibuat dengan mengatur ulang file berformat SSH-2.

Meregenerasi Kunci Publik

Jika Anda memanfaatkannya ssh-agent, kemungkinan besar Anda juga akan memiliki akses ke ssh-keygen.

Jika Anda memiliki OpenSSH Private Key ( id_rsafile), Anda dapat membuat File Kunci Publik OpenSSH menggunakan:

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

Jika Anda hanya memiliki PUTTY Private Key ( id_rsa.ppkfile), Anda harus mengonversinya terlebih dahulu.

  1. Buka Pembangkit Kunci PuTTY
  2. Di bilah menu, klik "File"> "Muat kunci pribadi"
  3. Pilih id_rsa.ppkfile Anda
  4. Di bilah menu, klik "Konversi"> "Ekspor kunci OpenSSH"
  5. Simpan file sebagai id_rsa(tanpa ekstensi)

Sekarang setelah Anda memiliki OpenSSH Private Key, Anda dapat menggunakan ssh-keygenalat seperti di atas untuk melakukan manipulasi pada kunci tersebut.

Bonus: Format Kunci Publik berenkode PKCS # 1 PEM

Sejujurnya, saya tidak tahu untuk apa kunci ini digunakan karena saya tidak membutuhkannya. Tetapi saya memilikinya dalam catatan saya yang telah saya susun selama bertahun-tahun dan saya akan memasukkannya di sini untuk kebaikan yang sehat. File tersebut akan terlihat seperti ini:

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

File ini dapat dibuat menggunakan Kunci Pribadi OpenSSH (seperti yang dibuat dalam "Membuat Ulang Kunci Publik" di atas) menggunakan:

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

Atau, Anda dapat menggunakan Kunci Publik OpenSSH menggunakan:

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

Referensi:

samthecodingman
sumber
Ketika Anda mengonversi kunci pribadi Anda ke kunci OpenSSH, menurut pendapat saya merekomendasikan untuk membiarkan file tanpa ekstensi dan tidak disukai. Git-client saya tidak akan terhubung ke repositori jarak jauh ketika ekstensi digunakan untuk kunci pribadi.
Programmer1994
@ Programmer1994 Instruksi konversi disertakan sebagai langkah-langkah untuk mengonversi .ppkke .pubfile. Efek samping id_rsakunci privat perantara yang sebenarnya digunakan oleh program lain telah terabaikan. Saya telah mengubah bahasa "sebaiknya tanpa ekstensi" menjadi "(tanpa ekstensi)" untuk menghilangkan ambiguitas. Saya juga mengambil kesempatan untuk menulis ulang beberapa keluhan yang muncul setiap kali saya melihat kembali jawaban ini. Terima kasih atas kontribusi anda.
samthecodingman
Terima kasih atas jawabannya. Saya menggunakan perintah di bagian jawaban Anda "Regenerating Public Keys" dan itu memecahkan masalah saya.
desmond13
Anda berbicara tentang kunci publik. tetapi masalah dihasilkan dari kunci pribadi id_rsa. Saya mendapatkan peringatan yang sama ketika saya menggunakan kunci ssh pribadi saya ketika mencoba mengakses server git melalui ssh.
ahnbizcad
5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubini menyelesaikannya. TERIMA KASIH!
Dwza
15

Ada solusi sederhana jika Anda dapat menginstal dan menggunakan alat puttygen. Berikut langkah-langkahnya. Anda harus memiliki frasa sandi dari kunci pribadi.

langkah 1: Unduh puttygen terbaru dan buka puttygen

langkah 2: Muat file kunci pribadi Anda yang ada, lihat gambar di bawah ini

Muat kunci pribadi yang ada

langkah 3: Masukkan frasa sandi untuk kunci jika diminta dan tekan ok

masukkan paasphrase

langkah 4: seperti yang ditunjukkan pada gambar di bawah, pilih tab menu "konversi" dan pilih "Ekspor kunci OpenSSH"

simpan file OpenSSH

Simpan file kunci pribadi baru di lokasi pilihan dan gunakan yang sesuai.

PradeepNama
sumber
2
Saya mendapat load pubkey invalid formatperingatan, ketika saya mengekspor kunci dengan kunci Ekspor OpenSSH . Itu hilang saat menggunakan kunci Ekspor OpenSSH (paksa format file baru) .
elsamuko
Di linux, apt install putty-toolsatau yum install puttykemudiansudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel
8

TL; DR: juga pastikan bahwa Anda id_rsa.pubberada di ascii / UTF-8.

Saya memiliki masalah yang sama, namun jawaban yang diterima saja tidak berfungsi karena pengkodean teks, yang merupakan masalah tambahan yang mudah terlewatkan.

Saat aku lari

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

di Windows PowerShell, ini menyimpan output ke id_rsa.pubdalam pengkodean UTF-16 LE BOM , bukan dalam UTF-8 . Ini adalah properti dari beberapa instalasi PowerShell, yang telah dibahas dalam Menggunakan PowerShell untuk menulis file dalam UTF-8 tanpa BOM . Rupanya, OpenSSH tidak mengenali pengkodean teks sebelumnya dan menghasilkan kesalahan yang identik:

key_load_public: invalid format

Menyalin dan menempelkan keluaran ssh-keygen -f ~/.ssh/id_rsa -yke editor teks adalah cara termudah untuk mengatasi ini.

NB Ini bisa menjadi tambahan untuk jawaban yang diterima , tetapi saya belum memiliki cukup karma untuk berkomentar di sini.

paperkilltrees
sumber
1
Seperti yang Anda ketahui, perpipaan bekerja secara berbeda di Powershell. Anda akan menggunakan ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pubsebagai gantinya.
samthecodingman
7

Jika Anda menyalin kunci publik dengan clipboard dan menempelkannya, mungkin saja string kunci publik dapat rusak yang berisi baris baru.

Pastikan string kunci publik Anda dibentuk sebagai satu baris.

Hojin Choi
sumber
5

Tampaknya sshkunci publik Anda tidak dapat dibaca. Tapi itu tidak masalah.

Anda mengupload kunci publik ke github, tetapi mengautentikasi menggunakan kunci pribadi Anda . Lihat misalnya bagian FILES di ssh(1).

Roland Smith
sumber
2
Singkatnya, buka gen kunci putty, klik konversi -> buka kunci ssh dan simpan ke id_rsa - pastikan variabel HOME env Anda mengarah ke folder .ssh yang Anda lihat, hapus semua salinan file id_rsa lainnya dari sistem Anda
Kalpesh Soni
2

Alih-alih langsung menyimpan kunci pribadi, Pergi ke Konversi dan Ekspor Kunci SSh. Memiliki masalah yang sama dan ini berhasil untuk saya

Jignesh Rawal
sumber
1

Saya memiliki peringatan yang sama. Itu adalah kunci yang sangat tua. Saya membuat ulang kunci pada OpenSSH 7 saat ini, dan kesalahan itu hilang.

arberg
sumber
1

Kesalahan ini menyesatkan - " pubkey" dikatakan " " saat menunjuk ke file kunci pribadi ~/.ssh/id_rsa.

Dalam kasus saya, itu hanyalah kunci publik yang hilang (karena saya belum memulihkannya dari lemari besi).


DETAIL

Saya dulu melewatkan penerapan ~/.ssh/id_rsa.puboleh skrip otomatis.

Semua sshpenggunaan berfungsi, tetapi kesalahan membuat saya memikirkan kemungkinan kekacauan.

Tidak sama sekali - stracemembantu untuk memperhatikan bahwa pemicunya sebenarnya adalah *.pubfile tersebut:

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
uvsmtid.dll
sumber
0

Jadi, setelah pembaruan saya mengalami masalah yang sama. Saya menggunakan PEM key_filetanpa ekstensi dan hanya menambahkan .pemmemperbaiki masalah saya. Sekarang file tersebut adalah key_file.pem.

furang
sumber
0

Jika Anda menggunakan Windows 10 dengan SSH bawaan, per Agustus 2020 hanya mendukung kunci ed25519. Anda akan mendapatkan key_load_public: invalid formatkesalahan jika Anda menggunakan misalnya kunci RSA.

Sesuai dengan masalah GitHub ini, ini harus diperbaiki melalui Pembaruan Windows beberapa saat pada tahun 2020. Jadi salah satu solusinya adalah menunggu pembaruan dikirimkan.

Jika Anda tidak bisa menunggu, solusinya adalah dengan menghasilkan kunci ed25519 baru, yang merupakan saran yang bagus .

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

Anda dapat menggunakannya dengan misalnya github, tetapi beberapa sistem lama mungkin tidak mendukung format yang lebih baru ini.

Setelah membuat kunci Anda, jika Anda menggunakan salah satu fitur di bawah ini, jangan lupa untuk memperbaruinya!

  1. ~\.ssh\config mungkin masih mengarah ke kunci lama.
  2. Tambahkan kunci baru ke ssh-agent melalui ssh-addperintah
Akan
sumber