วิธีการแปลงคู่คีย์ SSH ที่สร้างโดยใช้ PuTTYgen (Windows) เป็นคู่คีย์ที่ใช้โดย ssh-agent และ Keychain (Linux)


464

ฉันสร้างคู่คีย์โดยใช้ PuTTYgen และเข้าสู่ระบบโดยใช้ Pageant เพื่อที่ฉันจะต้องป้อนวลีรหัสผ่านของฉันเพียงครั้งเดียวเมื่อระบบของฉันบูท

ฉันจะทำสิ่งนี้ได้อย่างไรใน Linux? ฉันได้ยินมาkeychainแต่ฉันได้ยินว่ามันใช้รูปแบบคู่ของคีย์ที่แตกต่างกัน - ฉันไม่ต้องการเปลี่ยนคีย์ Windows ของฉันและมันจะดีถ้าฉันสามารถเชื่อมต่อได้อย่างราบรื่นในลักษณะเดียวกันทั้งใน Windows และ Linux


ไม่ควรมีปัญหาใด ๆ ในการใช้คีย์ใน linux เช่นกัน ... เพียงแค่คัดลอกมันและเพิ่ม pub ไปยังกุญแจที่ได้รับอนุญาต ... แม้ว่าจะยอมรับว่าฉันไม่เข้าใจคำถามของคุณทั้งหมด
Randall Hunt

17
ไม่นั่นคือ - ฉันรู้มากว่ารูปแบบคีย์ที่ใช้โดย PuttyGen และ ssh-agent แตกต่างกันและพวกเขาจะต้องถูกแปลงอย่างชัดเจน - ดูคำตอบโดยละเอียดของ Kaleb ด้านล่าง
TCSGrad

คำตอบ:


714

puttygenรองรับการส่งออกคีย์ส่วนตัวของคุณเป็นรูปแบบที่รองรับ OpenSSH จากนั้นคุณสามารถใช้เครื่องมือ OpenSSH เพื่อสร้างพับลิกคีย์ได้

  1. เปิด PuttyGen
  2. คลิกโหลด
  3. โหลดคีย์ส่วนตัวของคุณ
  4. ไปที่Conversions->Export OpenSSHและส่งออกคีย์ส่วนตัวของคุณ
  5. คัดลอกรหัสส่วนตัวของคุณไปที่~/.ssh/id_dsa(หรือid_rsa)
  6. สร้างรหัสสาธารณะรุ่น RFC 4716 โดยใช้ ssh-keygen

    ssh-keygen -e -f ~/.ssh/id_dsa > ~/.ssh/id_dsa_com.pub
    
  7. แปลงเวอร์ชั่นพับลิกคีย์ RFC 4716 เป็นรูปแบบ OpenSSH:

    ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
    

ดูสิ่งนี้และสิ่งนี้สำหรับข้อมูลเพิ่มเติม


12
สำหรับผู้ที่ได้รับIt is required that your private key files are NOT accessible by othersข้อผิดพลาดเหมือนที่ฉันได้ทำงานcd ~/.sshและchmod 700 id_rsa
ผู้เชี่ยวชาญ

77
คุณหมายถึงchmod 600 id_rsa ไฟล์ไม่จำเป็นต้องสามารถเรียกใช้งานได้ :)
sig11

2
คำตอบนี้เป็นกุญแจสำคัญในการรับ ssh จากบรรทัดคำสั่งของ windows โดยใช้รหัสผ่านสำหรับฉัน (เฉพาะสำหรับการเข้าถึง git) คงจะช่วยให้ฉันเจ็บปวดหลายชั่วโมงถ้าฉันเห็นมันมาก่อนหน้านี้! ขอบคุณ!
Cori

2
puttygen สามารถดำเนินการได้จาก CLI หรือไม่
CMCDragonkai

20
ฉันถือว่านี่เป็นสิ่งใหม่ แต่ถ้าคุณเปิดคีย์ส่วนตัวใน puttygen มันจะแสดงสตริงสาธารณะคีย์ที่เข้ากันได้กับ OpenSSH ที่คัดลอกได้โดยอัตโนมัติใน UI
UpTheCreek

161

หากทั้งหมดที่คุณมีคือกุญแจสาธารณะจากผู้ใช้ในรูปแบบ PuTTY คุณสามารถแปลงเป็นรูปแบบ openssh มาตรฐานดังนี้:

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

อ้างอิง

สำเนาบทความ

ฉันลืมสิ่งนี้ไปเรื่อย ๆ ดังนั้นฉันจะเขียนมันที่นี่ ไม่ใช่เดินแค่เดินต่อไป

วิธีทั่วไปในการสร้างคีย์บน Windows คือการใช้ Putty / Puttygen Puttygen จัดเตรียมยูทิลิตี้ที่ใช้ในการแปลงคีย์ส่วนตัว linux ให้เป็นรูปแบบ Putty อย่างไรก็ตามสิ่งที่ไม่ได้รับการแก้ไขคือเมื่อคุณบันทึกพับลิกคีย์โดยใช้ puttygen มันจะไม่ทำงานบนเซิร์ฟเวอร์ linux Windows วางข้อมูลบางส่วนในพื้นที่ที่แตกต่างกันและเพิ่มตัวแบ่งบรรทัด

โซลูชัน: เมื่อคุณไปที่หน้าจอพับลิกคีย์ในการสร้างคู่คีย์ของคุณใน puttygen ให้คัดลอกคีย์สาธารณะและวางลงในไฟล์ข้อความที่มีนามสกุล. ผับ คุณจะช่วยให้คุณประหยัดเวลาดูแลระบบในการอ่านโพสต์เช่นนี้

อย่างไรก็ตาม, sysadmins, คุณจะได้รับไฟล์คีย์ wonky ที่ไม่มีข้อผิดพลาดในบันทึกรับรองความถูกต้องยกเว้นว่าไม่พบรหัส, ลองใช้รหัสผ่าน; แม้ว่าคีย์ของคนอื่นจะทำงานได้ดีและคุณได้ส่งคีย์นี้กลับไปยังผู้ใช้ 15 ครั้ง

ssh-keygen -i -f keyfile.pub > newkeyfile.pub

ควรแปลงกุญแจสาธารณะ puttygen ที่มีอยู่ให้เป็นรูปแบบ OpenSSH


2
นอกจากนี้คุณอาจต้องการคัดลอกความคิดเห็นของผู้ใช้จากComment:บรรทัดและวางในบรรทัดเดียวกับคีย์ใหม่คั่นด้วยช่องว่าง ฉันไม่รู้ว่าทำไม ssh-keygen จะไม่ทำเช่นนี้โดยปริยาย
เบีย

2
สิ่งนี้ทำให้ฉันมีข้อผิดพลาด:decode blob failed: invalid format
Chris Stryczynski

หากคุณอ่านบทความต้นฉบับรายละเอียดสำคัญคือวิธีการนี้ใช้งานได้เฉพาะเมื่อคุณคัดลอกคีย์จาก puttygen เมื่อดำเนินการผ่าน UI จะไม่แปลงคีย์ที่สร้างขึ้นจากไฟล์ที่ผลิตโดย puttygen
slm

ฉันสามารถใช้เครื่องมือเดียวกันเพื่อแปลงเป็นวิธีอื่นได้หรือไม่?
Olle Härstedt

ใช่ดูเหมือนว่าคุณกำลังดู: ssh-keygen -e -f openssh_key.pub> putty.pub
Erik

148

PuTTYgenเวอร์ชั่นใหม่(ของฉันคือ 0.64) สามารถแสดงพับลิกคีย์ OpenSSH ที่จะวางในระบบ linux ใน.ssh/authorized_keysไฟล์ดังแสดงในภาพต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่


7
คำตอบนี้ครอบคลุมถึงวิธีการตั้งค่าการรับรองความถูกต้องของคีย์บนรีโมตที่ใช้รูปแบบ OpenSSH แต่เพื่อใช้คีย์ที่สร้างด้วย Putty บนไคลเอนต์ Linux คำตอบนี้ไม่เพียงพอ ฉันทำตามคำตอบที่ยอมรับและใช้งานได้อย่างยอดเยี่ยม
wberry

52

อีกทางเลือกหนึ่งถ้าคุณต้องการคว้ากุญแจส่วนตัวและกุญแจสาธารณะจากไฟล์คีย์ที่จัดรูปแบบ PuTTY คุณสามารถใช้puttygenกับระบบ * nix สำหรับระบบที่ใช้ apt ส่วนใหญ่puttygenนั้นเป็นส่วนหนึ่งของputty-toolsแพ็คเกจ

การส่งออกคีย์ส่วนตัวจาก keyfile ที่จัดรูปแบบ PuTTY:

$ puttygen keyfile.pem -O private-openssh -o avdev.pvk

สำหรับรหัสสาธารณะ:

$ puttygen keyfile.pem -L


ถ้าด้วยเหตุผลบางอย่างคุณต้องทำสิ่งนี้ในกล่อง Windows (ไม่สามารถโอนคีย์ทั้งหมดไปยัง * ระวัง) และมีคีย์จำนวนมากที่ใช้ GUI นั้นยุ่งยากให้ลองรวบรวมแหล่ง Unix ภายใต้ Cygwin puttygen.exe นั้นจะให้ CLI "โหมดแบทช์" ตามที่อธิบายไว้ข้างต้น
Toddius Zho

2
OSX:brew install putty
Juha Palomäki

1
ที่ควรย้อนกลับ: puttygen inppk -O private-openssh -o outpemและputtygen inppk -L(หรือssh-keygen -y -f outpem)
dave_thompson_085

27
sudo apt-get install putty

สิ่งนี้จะติดตั้งเครื่องมือ puttygen โดยอัตโนมัติ

ตอนนี้การแปลงไฟล์ PPK ที่จะใช้กับคำสั่ง SSH ดำเนินการดังต่อไปนี้ใน terminal

puttygen mykey.ppk -O private-openssh -o my-openssh-key

จากนั้นคุณสามารถเชื่อมต่อผ่าน SSH ด้วย:

ssh -v user@example.com -i my-openssh-key

http://www.graphicmist.in/use-your-putty-ppk-file-to-ssh-remote-server-in-ubuntu/#comment-28603


นี่ไม่ได้แสดงอะไรมากไปกว่าสิ่งที่มีอยู่แล้วในคำตอบของ @John Jawed
Martin Prikryl

ข้อโต้แย้งอธิบายสิ่งที่พวกเขาเป็นตัวแทน +1
danronmoon

ที่ดี! วิธีนี้ใช้ได้ผล นอกจากนี้ในการติดตั้งผงสำหรับอุดรูบน Macos: ชงติดตั้งผงสำหรับอุดรู
Dylan B

14

ฉันเพิ่งมีปัญหานี้เมื่อฉันย้ายจาก Putty สำหรับ Linux ไปยัง Remmina สำหรับ Linux ดังนั้นฉันจึงมีไฟล์ PPK มากมายสำหรับ Putty ใน.puttyไดเรกทอรีของฉันเพราะฉันใช้มันมา 8 ปีแล้ว สำหรับเรื่องนี้ฉันใช้forคำสั่งง่ายๆสำหรับ bash shell เพื่อทำไฟล์ทั้งหมด:

cd ~/.putty
for X in *.ppk; do puttygen $X -L > ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pub; puttygen $X -O private-openssh -o ~/.ssh/$(echo $X | sed 's,./,,' | sed 's/.ppk//g').pvk; done;

รวดเร็วมากและตรงประเด็นได้งานสำหรับไฟล์ทั้งหมดที่มีสีโป๊ว หากพบรหัสด้วยรหัสผ่านมันจะหยุดและขอรหัสผ่านสำหรับรหัสนั้นก่อนจากนั้นดำเนินการต่อ


2
สำหรับคนขี้เกียจอย่างฉันนี่คือ copy-paste เพื่อรับ puttygen บน Ubuntu: sudo apt-get install putty-tools
Lennart Rolland

"ง่าย" - ฉันเกลียดที่จะเห็นความซับซ้อน!
Alex Jansen

8

อาจเป็นการง่ายกว่าที่จะสร้างคีย์ของคุณภายใต้ linux และใช้ PuTTYgen เพื่อแปลงคีย์เป็นรูปแบบ PuTTY

ถามคำถาม PuTTY: A.2.2


14
น่าเสียดายที่มันไม่ใช่ตัวเลือกถ้าคุณมีคีย์ที่มีอยู่ซึ่งคุณต้องใช้
ผู้เชี่ยวชาญ

6

ฉันคิดว่าสิ่งที่ TCSgrad พยายามถาม (ไม่กี่ปีที่ผ่านมา) คือวิธีที่จะทำให้ Linux ทำงานเหมือนที่เครื่อง Windows ของเขาทำ นั่นคือมีเอเจนต์ (pageant) ซึ่งเก็บสำเนาของคีย์ส่วนตัวที่ถอดรหัสเพื่อให้วลีรหัสผ่านจำเป็นต้องใส่เพียงครั้งเดียว จากนั้นลูกค้า ssh putty สามารถเข้าสู่ระบบเครื่องที่คีย์สาธารณะของเขาถูกระบุว่าเป็น "ผู้มีอำนาจ" โดยไม่ต้องแจ้งรหัสผ่าน

อะนาล็อกสำหรับสิ่งนี้คือ Linux ซึ่งทำหน้าที่เป็นไคลเอ็นต์ sshมีเอเจนต์ที่ถือไพรเวตคีย์ถอดรหัสดังนั้นเมื่อ TCSgrad พิมพ์ "ssh host" คำสั่ง ssh จะได้รับคีย์ส่วนตัวของเขาและไปโดยไม่ได้รับพร้อมท์สำหรับรหัสผ่าน แน่นอนว่าโฮสต์จะต้องถือกุญแจสาธารณะใน ~ / .ssh / authorized_keys

อะนาล็อก Linux กับสถานการณ์นี้สามารถทำได้โดยใช้ ssh-agent (อะนาล็อก pageant) และ ssh-add (อะนาล็อกเพื่อเพิ่มคีย์ส่วนตัวให้กับผู้เข้าประกวด)

วิธีที่ใช้ได้ผลกับฉันคือการใช้: $ ssh-agent $ SHELL นั่น $ SHELL เป็นเคล็ดลับเวทมนต์ที่ฉันต้องการเพื่อให้ตัวแทนทำงานและทำงานต่อไป ฉันพบว่ามีที่ไหนซักแห่งใน 'ตาข่ายและมันก็จบลงด้วยการตีหัวของฉันกับผนัง

ตอนนี้เรามีการวิ่งแบบอะนาล็อกของการแข่งขันตัวแทนที่ไม่มีคีย์โหลดอยู่

การพิมพ์ $ ssh-add ด้วยตัวเองจะเพิ่ม (โดยค่าเริ่มต้น) คีย์ส่วนตัวที่แสดงอยู่ในไฟล์ข้อมูลประจำตัวเริ่มต้นใน ~ / .ssh

บทความเว็บที่มีรายละเอียดเพิ่มเติมมากมายสามารถดูได้ที่นี่


0

PPK → OpenSSH RSA พร้อม PuttyGen & Docker

รหัสส่วนตัว:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -O private-openssh -o my-openssh-key

รหัสสาธารณะ:

docker run --rm -v $(pwd):/app zinuzoid/puttygen private.ppk -L -o my-openssh-key.pub

ดูเพิ่มเติมที่https://hub.docker.com/r/zinuzoid/puttygen

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