key_load_public: รูปแบบไม่ถูกต้อง


98

ฉันใช้ PuTTY Key Generator เพื่อสร้างคีย์ RSA-2 4096 บิตพร้อมข้อความรหัสผ่าน

ฉันบันทึกคีย์สาธารณะรูปแบบ. ppt และ openSSL คีย์สาธารณะรูปแบบผงสำหรับอุดรูไม่ทำงาน

ไม่ว่าในกรณีใดข้อผิดพลาดของฉันมีดังนี้:

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

ปัญหาคืออะไร?

ฉันใช้ Pageant เพื่อโหลดคีย์และฉันใช้ Git Bash เพื่อลองเชื่อมต่อ ssh ฉันโหลดคีย์ลงใน GitHub ด้วยไม่แน่ใจว่าฉันทำอะไรผิด

ฉันได้ลองเพิ่มบรรทัดใหม่แล้วและไม่ได้เพิ่มบรรทัดใหม่ใน GitHub


ทำไมคุณถึงคิดว่ามันไม่ได้ผล? มันแจ้งว่าพิสูจน์ตัวตนสำเร็จแล้ว
Roland Smith

2
@RolandSmith มันกำลังบอกฉันkey_load_public: invalid formatใช่ไหมว่าฉันรันคำสั่งก่อนที่ฉันจะป้อนข้อความรหัสผ่าน?
JordanGS

1
ทำ: 'ssh -vvv -T git@github.com' เพื่อรับข้อมูลเพิ่มเติมอาจเป็นไปได้ว่า ~ / .ssh / known_hosts ไม่ถูกต้อง - ssh กำลังมองหาคีย์สาธารณะของ github คุณสามารถเรียกใช้ 'คีย์ไฟล์' เพื่อค้นหารูปแบบของไฟล์คีย์
ร็อก

คำตอบ:


181

ในฐานะที่เป็นโรลันด์กล่าวถึงในคำตอบของพวกเขาก็เตือนว่าssh-agentไม่เข้าใจรูปแบบของคีย์สาธารณะและแม้แล้วคีย์สาธารณะจะไม่ถูกนำมาใช้ในประเทศ

อย่างไรก็ตามฉันสามารถอธิบายและตอบได้อย่างละเอียดว่าเหตุใดจึงมีคำเตือนดังกล่าว มันเป็นเพียงความจริงที่ว่าPuTTY Key Generatorสร้างคีย์สาธารณะสองรูปแบบที่แตกต่างกันขึ้นอยู่กับสิ่งที่คุณทำในโปรแกรม

หมายเหตุ:ตลอดคำอธิบายของฉันไฟล์สำคัญที่ฉันจะใช้ / สร้างจะได้รับการตั้งชื่อid_rsaด้วยนามสกุลที่เหมาะสม ~/.ssh/นอกจากนี้สำหรับคัดลอกวางความสะดวกสบายโฟลเดอร์หลักของคีย์จะได้รับการสันนิษฐานว่าจะเป็น ปรับรายละเอียดเหล่านี้ให้เหมาะกับความต้องการของคุณตามต้องการ

รูปแบบ

ลิงก์ไปยังเอกสาร PuTTY ที่เกี่ยวข้อง

SSH-2

เมื่อคุณบันทึกที่สำคัญโดยใช้เครื่องกำเนิดไฟฟ้าที่สำคัญฉาบโดยใช้ปุ่ม "บันทึกคีย์สาธารณะ" ก็จะถูกบันทึกไว้ในรูปแบบที่กำหนดโดยRFC 4716

ตัวอย่าง:

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

รูปแบบนี้ไม่ได้รับการบันทึกโดยเครื่องกำเนิดไฟฟ้า อย่างไรก็ตามมันถูกสร้างขึ้นและแสดงในกล่องข้อความที่ชื่อว่า "คีย์สาธารณะสำหรับวางลงในไฟล์ OpenSSH Authorized_keys" หากต้องการบันทึกเป็นไฟล์คุณต้องคัดลอกจากกล่องข้อความด้วยตนเองและวางลงในไฟล์ข้อความใหม่

สำหรับคีย์ที่แสดงด้านบนนี้จะเป็น:

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

รูปแบบของคีย์นั้นเรียบง่ายssh-rsa <signature> <comment>และสามารถสร้างได้โดยการจัดรูปแบบไฟล์ SSH-2 ใหม่

การสร้างคีย์สาธารณะใหม่

หากคุณใช้ประโยชน์ssh-agentคุณจะสามารถเข้าถึงได้ssh-keygenด้วย

หากคุณมีคีย์ส่วนตัว OpenSSH ( id_rsaไฟล์) คุณสามารถสร้างไฟล์คีย์สาธารณะ OpenSSH โดยใช้:

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

หากคุณมีเพียง PUTTY Private Key ( id_rsa.ppkไฟล์) คุณจะต้องทำการแปลงก่อน

  1. เปิดPuTTY Key Generator
  2. บนแถบเมนูคลิก "ไฟล์"> "โหลดคีย์ส่วนตัว"
  3. เลือกid_rsa.ppkไฟล์ของคุณ
  4. บนแถบเมนูคลิก "Conversion"> "ส่งออกคีย์ OpenSSH"
  5. บันทึกไฟล์เป็นid_rsa(ไม่มีนามสกุล)

ตอนนี้คุณมีคีย์ส่วนตัว OpenSSH แล้วคุณสามารถใช้ssh-keygenเครื่องมือดังกล่าวข้างต้นเพื่อดำเนินการปรับแต่งคีย์ได้

โบนัส: รูปแบบคีย์สาธารณะที่เข้ารหัส PKCS # 1 PEM

บอกตามตรงว่าฉันไม่รู้ว่าคีย์นี้ใช้ทำอะไรเพราะฉันไม่ต้องการมัน แต่ฉันมีไว้ในบันทึกของฉันฉันได้รวบรวมมาหลายปีแล้วและฉันจะรวมไว้ที่นี่เพื่อความดีงาม ไฟล์จะมีลักษณะดังนี้:

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

ไฟล์นี้สามารถสร้างได้โดยใช้คีย์ส่วนตัว OpenSSH (ตามที่สร้างใน "การสร้างคีย์สาธารณะใหม่" ด้านบน) โดยใช้:

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

หรือคุณสามารถใช้คีย์สาธารณะ OpenSSH โดยใช้:

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

อ้างอิง:


เมื่อคุณแปลงคีย์ส่วนตัวของคุณเป็นคีย์ OpenSSH ในความคิดของฉันแนะนำให้ปล่อยไฟล์ที่ไม่มีนามสกุลและไม่เป็นที่ต้องการ git-client ของฉันจะไม่เชื่อมต่อกับที่เก็บระยะไกลเมื่อใช้ส่วนขยายสำหรับคีย์ส่วนตัว
Programmer1994

@ Programmer1994 คำแนะนำการแปลงรวมเป็นขั้นตอนในการแปลง.ppkเป็น.pubไฟล์ ผลข้างเคียงของid_rsaคีย์ส่วนตัวตัวกลางที่โปรแกรมอื่นใช้จริงถูกมองข้ามไป ฉันได้เปลี่ยนภาษา "โดยเฉพาะอย่างยิ่งไม่มีส่วนขยาย" เป็น "(ไม่มีส่วนขยาย)" เพื่อล้างความคลุมเครือ ฉันยังมีโอกาสที่จะไขข้อข้องใจบางอย่างที่เกิดขึ้นเมื่อใดก็ตามที่ฉันมองย้อนกลับไปที่คำตอบนี้ ขอขอบคุณสำหรับการสนับสนุนของคุณ.
samthecodingman

ขอบคุณสำหรับคำตอบ. ฉันใช้คำสั่งในส่วนของคำตอบของคุณ "การสร้างคีย์สาธารณะใหม่" และมันช่วยแก้ปัญหาของฉันได้
desmond13

คุณพูดถึงกุญแจสาธารณะ แต่ปัญหานี้สร้างขึ้นจากรหัสส่วนตัว id_rsa ฉันได้รับคำเตือนเหมือนกันเมื่อฉันใช้คีย์ ssh ส่วนตัวเมื่อพยายามเข้าถึงเซิร์ฟเวอร์ git ผ่าน ssh
ahnbizcad

5
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pubสิ่งนี้แก้ไขได้ ขอบคุณ!
Dwza

15

มีวิธีง่ายๆหากคุณสามารถติดตั้งและใช้เครื่องมือฉาบได้ ด้านล่างนี้เป็นขั้นตอน คุณควรมีข้อความรหัสผ่านของคีย์ส่วนตัว

ขั้นตอนที่ 1: ดาวน์โหลดputtygenล่าสุดและเปิด puttygen

ขั้นตอนที่ 2: โหลดไฟล์คีย์ส่วนตัวที่มีอยู่ดูภาพด้านล่าง

โหลดคีย์ส่วนตัวที่มีอยู่

ขั้นตอนที่ 3: ป้อนข้อความรหัสผ่านสำหรับคีย์หากถูกถามและกดตกลง

ป้อน Paasphrase

ขั้นตอนที่ 4: ดังแสดงในภาพด้านล่างเลือกแท็บเมนู "การแปลง" และเลือก "ส่งออกคีย์ OpenSSH"

บันทึกไฟล์ OpenSSH

บันทึกไฟล์คีย์ส่วนตัวใหม่ในตำแหน่งที่ต้องการและใช้ตามนั้น


2
ผมได้load pubkey invalid formatเตือนเมื่อฉันส่งออกที่สำคัญที่มีการส่งออกที่สำคัญ OpenSSH มันก็ออกไปเมื่อใช้การส่งออกที่สำคัญ OpenSSH (บังคับรูปแบบไฟล์ใหม่)
elsamuko

ในลินุกซ์apt install putty-toolsหรือyum install puttyจากนั้นsudo puttygen private.ppk -O private-openssh-new -o private.pem
Typel

8

TL; DR:ตรวจสอบให้แน่ใจว่าคุณid_rsa.pubอยู่ใน ascii / UTF-8

ฉันมีปัญหาเดียวกัน แต่คำตอบที่ยอมรับเพียงอย่างเดียวใช้ไม่ได้เนื่องจากการเข้ารหัสข้อความซึ่งเป็นปัญหาเพิ่มเติมที่ง่ายต่อการพลาด

เมื่อฉันวิ่ง

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

ใน Windows PowerShell ก็จะบันทึกออกไปid_rsa.pubในUTF-16 LE BOMเข้ารหัสไม่ได้อยู่ในUTF-8 นี่คือคุณสมบัติของการติดตั้งบางส่วนของ PowerShell ซึ่งได้รับการกล่าวถึงในการใช้ PowerShell เพื่อเขียนไฟล์ UTF-8 โดยไม่มีรายการวัสดุ เห็นได้ชัดว่า OpenSSH ไม่รู้จักการเข้ารหัสข้อความในอดีตและสร้างข้อผิดพลาดที่เหมือนกัน:

key_load_public: invalid format

การคัดลอกและวางผลลัพธ์ssh-keygen -f ~/.ssh/id_rsa -yลงในโปรแกรมแก้ไขข้อความเป็นวิธีที่ง่ายที่สุดในการแก้ปัญหานี้

ป.ล. นี่อาจเป็นส่วนเสริมของคำตอบที่ยอมรับแต่ฉันยังไม่มีกรรมเพียงพอที่จะแสดงความคิดเห็นที่นี่


1
อย่างที่คุณค้นพบการเดินท่อจะทำงานแตกต่างกันใน Powershell คุณจะใช้ssh-keygen -f ~/.ssh/id_rsa -y | ac ~/.ssh/id_rsa.pubแทน
samthecodingman

7

ในกรณีที่คุณคัดลอกคีย์สาธารณะของคุณด้วยคลิปบอร์ดและวางอาจเกิดขึ้นที่สตริงคีย์สาธารณะอาจเสียซึ่งมีบรรทัดใหม่

ตรวจสอบให้แน่ใจว่าสตริงคีย์สาธารณะของคุณสร้างเป็นหนึ่งบรรทัด


5

ดูเหมือนว่าsshจะไม่สามารถอ่านคีย์สาธารณะของคุณได้ แต่นั่นไม่สำคัญ

คุณอัปโหลดของคุณคีย์สาธารณะเพื่อ GitHub แต่คุณตรวจสอบการใช้ของคุณคีย์ส่วนตัว ssh(1)ดูเช่นส่วนไฟล์ใน


2
ในระยะสั้นไปที่ putty key gen คลิกการแปลง -> เปิดคีย์ ssh แล้วบันทึกลงใน id_rsa - ตรวจสอบให้แน่ใจว่าตัวแปร HOME env ของคุณชี้ไปที่โฟลเดอร์. sh ที่คุณกำลังดูอยู่ลบสำเนาของไฟล์ id_rsa อื่น ๆ ทั้งหมดออกจากระบบของคุณ
Kalpesh Soni

2

แทนที่จะบันทึกคีย์ส่วนตัวโดยตรงไปที่ Conversion และส่งออกคีย์ SSh มีปัญหาเดียวกันและสิ่งนี้ใช้ได้ผลสำหรับฉัน


1

ฉันมีคำเตือนเหมือนกัน มันเป็นกุญแจเก่ามาก ฉันสร้างคีย์ใหม่บน OpenSSH 7 ปัจจุบันและข้อผิดพลาดก็หายไป


1

ข้อผิดพลาดที่จะทำให้เข้าใจผิด - มันบอกว่า " pubkey" ~/.ssh/id_rsaในขณะที่ชี้ไปยังไฟล์คีย์ส่วนตัว

ในกรณีของฉันมันเป็นเพียงคีย์สาธารณะที่หายไป (เนื่องจากฉันไม่ได้กู้คืนจากห้องนิรภัย)


รายละเอียด

ฉันเคยข้ามการปรับใช้~/.ssh/id_rsa.pubโดยสคริปต์อัตโนมัติ

การsshใช้งานทั้งหมดใช้งานได้ แต่ข้อผิดพลาดทำให้ฉันคิดว่าอาจเป็นเรื่องยุ่งเหยิง

ไม่เลย - straceช่วยให้สังเกตว่าทริกเกอร์เป็น*.pubไฟล์:

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

หลังจากอัปเดตฉันมีปัญหาเดียวกัน ฉันใช้ PEM key_fileโดยไม่มีส่วนขยายและเพียงแค่เพิ่ม.pemแก้ไขปัญหาของฉัน ตอนนี้ไฟล์key_file.pem.


0

หากคุณใช้ Windows 10 พร้อม SSH ในตัว ณ เดือนสิงหาคม 2020 จะรองรับเฉพาะ ed25519 คีย์เท่านั้น คุณจะได้รับkey_load_public: invalid formatข้อผิดพลาดหากคุณใช้เช่นคีย์ RSA

ตามปัญหา GitHub นี้ควรได้รับการแก้ไขผ่าน Windows Update สักระยะในปี 2020 ดังนั้นทางออกหนึ่งคือรอให้การอัปเดตจัดส่ง

ถ้าคุณไม่สามารถรอการแก้ปัญหาคือการสร้างคีย์ ed25519 ใหม่ซึ่งเป็นคำแนะนำที่ดีอยู่แล้ว

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

คุณสามารถใช้กับ github ได้ แต่ระบบเก่าบางระบบอาจไม่รองรับรูปแบบที่ใหม่กว่านี้

หลังจากสร้างคีย์ของคุณแล้วหากคุณกำลังใช้คุณสมบัติด้านล่างนี้อย่าลืมอัปเดต!

  1. ~\.ssh\config อาจยังชี้ไปที่คีย์เก่า
  2. เพิ่มคีย์ใหม่ให้กับ ssh-agent ผ่านssh-addคำสั่ง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.