แปลงรหัสส่วนตัว OpenSSH เป็นรหัสส่วนตัว SSH2


29

มีวิธีแปลงคู่ของคีย์ OpenSSH ที่มีอยู่เป็นคู่ของ SSH2 (รูปแบบ ssh.com) หรือไม่?

UPD : เนื่องจากมีคำตอบบางอย่างเกี่ยวกับการssh-keygenปรากฏตัวขึ้นอย่างฉับพลันฉันจะอธิบายว่าฉันมาจากไหน (เช่นกันจะเป็นคำตอบที่ดีสำหรับ "คุณลองทำอะไรบ้าง")

$> diff --report-identical-files <(ssh-keygen -e -f ~/.ssh/id_dsa) <(ssh-keygen -e -f ~/.ssh/id_dsa.pub)
Files /tmp/zshAGGWAK and /tmp/zshPZiIr6 are identical

กล่าวอีกนัยหนึ่งคือssh-keygenส่งคืนคีย์เดียวกันสำหรับคีย์ส่วนตัวและคีย์สาธารณะ (แฮชของไฟล์ต้นฉบับแตกต่างกันอย่างเห็นได้ชัดฉันได้ตรวจสอบสองครั้งเพื่อให้แน่ใจว่าเป็นกุญแจส่วนตัวและกุญแจสาธารณะที่ถูกต้อง) ดูเหมือนว่าจะssh-keygenสร้างคีย์สาธารณะเฉพาะสำหรับคีย์ส่วนตัวหรือสาธารณะ

ฉันทำผิดหรือเป็นพฤติกรรมปกติ

คำตอบ:


43

บทช่วยสอนนี้: SSH: แปลง OpenSSH เป็น SSH2 และคีมจับในทางกลับกันดูเหมือนจะเสนอสิ่งที่คุณกำลังมองหา

แปลงคีย์ OpenSSH เป็นคีย์ SSH2

รันเวอร์ชัน OpenSSH ของssh-keygenบนกุญแจสาธารณะ OpenSSH ของคุณเพื่อแปลงเป็นรูปแบบที่ SSH2 ต้องการบนเครื่องระยะไกล สิ่งนี้จะต้องทำบนระบบที่ใช้ OpenSSH

$ ssh-keygen -e -f ~/.ssh/id_dsa.pub > ~/.ssh/id_dsa_ssh2.pub

แปลงคีย์ SSH2 เป็นคีย์ OpenSSH

เรียกใช้รุ่น OpenSSH ของssh-keygenรหัสสาธารณะ ssh2 ของคุณเพื่อแปลงเป็นรูปแบบที่ OpenSSH ต้องการ สิ่งนี้จะต้องทำบนระบบที่ใช้ OpenSSH

$ ssh-keygen -i -f ~/.ssh/id_dsa_1024_a.pub > ~/.ssh/id_dsa_1024_a_openssh.pub

บทช่วยสอนดำเนินการเพื่อแสดงวิธีการสร้างคีย์ประเภทต่าง ๆ และวิธีส่งออกไปยังรูปแบบอื่น ๆ

ใช้สิ่งนี้สำหรับกุญแจส่วนตัว & สาธารณะ?

ตามหน้า man คำตอบจะเป็นใช่ ดูที่หน้า man ของssh-keygenมันระบุต่อไปนี้สำหรับ-eสวิตช์:

 -e    This option will read a private or public OpenSSH key file and print
       the key in RFC 4716 SSH Public Key File Format to stdout.  This option
       allows exporting keys for use by several commercial SSH implementations.

แต่ในทางปฏิบัติมันจะปรากฏขึ้นที่ssh-keygenไม่สามารถแปลงคีย์ส่วนตัวได้เฉพาะสาธารณะ

ตัวอย่างเช่น:

# Make a new RSA key-pair
$ ssh-keygen -t rsa -f newkey

# attempt to extract the private key
$ ssh-keygen -e -f newkey > newkey_e

# attempt to extract the public key
$ ssh-keygen -e -f newkey.pub > newkey.pub_e

# Notice the supposed extracted private key (newkey_e) and the corresponding extracted public key (newkey.pub_e) have identical `md5sum`'s.
$ for i in *;do md5sum $i;done
d1bd1c12c4a2b9fee4b5f8f83150cf1a  newkey
8b67a7be646918afc7a041119e863be5  newkey_e
13947789d5dcc5322768bd8a2d3f562a  newkey.pub
8b67a7be646918afc7a041119e863be5  newkey.pub_e

การดูคีย์ที่แยกออกมาเป็นผลลัพธ์ยืนยันสิ่งนี้:

$ grep BEGIN newkey_e newkey.pub_e 
newkey_e:---- BEGIN SSH2 PUBLIC KEY ----
newkey.pub_e:---- BEGIN SSH2 PUBLIC KEY ----

Googling นิดหน่อยฉันเจอปัญหานี้จากบทความที่ชื่อ: คุณจะแปลงไฟล์คีย์ส่วนตัวของ OpenSSH เป็น SSHได้อย่างไร เว็บไซต์ดูเหมือนว่าจะขึ้นและลง แต่มองในแคชของ Google สำหรับหน้านี้ฉันได้พบการแจ้งเตือนต่อไปนี้

คุณจะแปลงไฟล์กุญแจ OpenSSH Private เป็น SSH.com Private key อย่างไร

ไม่สามารถทำได้โดยโปรแกรม ssh-keygen แม้ว่าหน้าคนส่วนใหญ่จะบอกว่าสามารถทำได้ พวกเขาไม่แนะนำให้คุณใช้กุญแจสาธารณะหลายอัน ปัญหาเดียวคือ RCF จะไม่อนุญาตให้คุณลงทะเบียนพับลิกคีย์มากกว่าหนึ่งคีย์

บทความนี้ยังกล่าวถึงวิธีการแปลงรหัสส่วนตัว openssh เป็นรหัสส่วนตัว ssh.com ผ่านการใช้เครื่องมือของ PuTTY หมายเหตุ:สามารถเรียกใช้จาก Windows & Linuxputtygen puttygen

เปิด 'puttygen' และสร้างคู่คีย์สาธารณะ / ส่วนตัว 2048 บิต rsa ตรวจสอบให้แน่ใจว่าคุณเพิ่มรหัสผ่านหลังจากสร้างแล้ว บันทึกพับลิกคีย์เป็น "puttystyle.pub" และบันทึกไพรเวตคีย์เป็น "puttystyle" โปรแกรม putty และโปรแกรม SSH.com ใช้รูปแบบพับลิกคีย์ทั่วไป แต่โปรแกรม putty และ OpenSSH มีรูปแบบพับลิกคีย์อื่น เราจะกลับมาที่นี่ในภายหลัง คุณควรจะสามารถโหลดคีย์ puttystyle ทั้งสองลงในโปรแกรม putty อย่างไรก็ตามรูปแบบคีย์ส่วนตัวสำหรับ putty และ SSH.com นั้นไม่เหมือนกันดังนั้นคุณจะต้องสร้างไฟล์ที่แปลงแล้ว ไปที่เมนูการแปลงและส่งออกคีย์ SSH.com บันทึกเป็น "sshstyle" ตอนนี้กลับไปที่เมนูการแปลงและส่งออกคีย์ openssh บันทึกเป็น "openssh" ชื่อเหล่านี้เป็นกฎเกณฑ์และคุณสามารถเลือกได้เอง คุณจะต้องเปลี่ยนชื่อสำหรับการติดตั้งบนเครื่อง OpenSSH ในภายหลัง ดูด้านล่าง

เมื่อพิจารณาจากข้างต้นฉันใช้วิธีการต่อไปนี้โดยputtygenใช้คู่คีย์ openssh ส่วนตัว / สาธารณะที่สร้างขึ้นก่อนหน้านี้:

# generate ssh.com private key from private openssh key
$ puttygen newkey -O private-sshcom -o newkey.puttygen-sshcom

# generate ssh.com public key from private openssh key
$ puttygen newkey -O public -o newkey.pub_puttygen-sshcom

# generate openssh public key from private openssh key (for confirmation)
$ puttygen newkey -O public-openssh -o newkey.pub_puttygen-openssh

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

การเปรียบเทียบคีย์สาธารณะ ssh.com:

$ tail -n +3 newkey.pub_e | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

$ tail -n +3 newkey.pub_puttygen-sshcom | head -1 | cut -c 1-60
AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wb

การเปรียบเทียบคีย์ opensh สาธารณะ:

$ cut -c 1-100 newkey.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

$ cut -c 1-100 newkey.pub_puttygen-openssh 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDFkZdpmbze9c6pT883rE1i64TJd4wbz9x/w6I2DmSZVI9TJa6M9jgGE952QsOY

3
และการแปลงคีย์ส่วนตัวล่ะ
ДМИТРИЙМАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - ทำไมถึงเป็นเช่นนั้น ฉันลองแล้วดูเหมือนว่าจะทำงานกับคีย์ส่วนตัวหรือสาธารณะ
slm

1
ไม่แน่ใจว่าจะส่งคืนคีย์ส่วนตัวที่ถูกต้องสำหรับฉัน: $> a="$(ssh-keygen -e -f ~/.ssh/id_rsa)m"; b="$(ssh-keygen -e -f ~/.ssh/id_rsa.pub)m"; md5sum <<< $a; md5sum <<< $b ce615aa3e39e274d0bd81064399cedf8 - ce615aa3e39e274d0bd81064399cedf8 -. แฮชของไฟล์ต้นฉบับต่างกัน obv ดูเหมือนว่าจะส่งคืนคีย์สาธารณะสำหรับคีย์ส่วนตัวหรือสาธารณะ
ДМИТРИЙМАЛИКОВ

@ ДМИТРИЙМАЛИКОВ - ดูอัปเดตของฉันสำหรับคำตอบ คุณถูกต้องที่ssh-keygenให้คืนกุญแจสาธารณะ ฉันใช้วิธีการวิจัยเพิ่มเติม LMK ถ้าเป็นที่ยอมรับ
slm

1
แอตทริบิวต์ puttygen อาจเป็นเรื่องยาก: puttygen <OpenSSH_priv_key> -O public -o id_rsa_ssh2_puttygen{.pub}( -Oย่อมาจากประเภทเอาท์พุทและเอาท์-oพุทไฟล์ ) ที่สร้างคีย์ส่วนตัวssh2และกุญแจสาธารณะจาก OpenSSH 7.0 สร้างคีย์ส่วนตัว rsa 2048 บิต ไม่ทำงานบนไคลเอนต์ Win Phone 7.5 (* The SSH Client โดย Tommi Pirttiniemi) แต่ต้องขอบคุณ @ ДМИТРИЙМАЛИКОВและ @slm สำหรับคำตอบที่ดี @Othus puttygen มาพร้อมกับputtyArch
tuk0z

1

ssh-keygenจะไม่ส่งออกคีย์ส่วนตัวในรูปแบบ pem แต่จะแปลงคีย์ส่วนตัว openssh ที่มีอยู่ให้เป็นรูปแบบ pem เขียนทับต้นฉบับ สิ่งที่คุณต้องทำคือแก้ไขรหัสผ่าน

คำสั่งในการแปลง~/.ssh/id_rsaไฟล์ของคุณจากรูปแบบ OpenSSH เป็นรูปแบบ SSH2 (pem) คือ:

ssh-keygen -p -f ~/.ssh/id_rsa -m pem

จากนั้นจัดหา (เก่า) และวลีรหัสผ่านใหม่ที่พรอมต์ พวกเขาสามารถเหมือนกันหรือแม้กระทั่งทั้งสองจะว่างเปล่า หรือคุณสามารถระบุพวกเขาในบรรทัดคำสั่งโดยใช้ตัวเลือก-P(ข้อความรหัสผ่านเก่า) และ-N(ข้อความรหัสผ่านใหม่) ตัวอย่างเช่นหากวลีรหัสผ่านว่างเปล่าและคุณต้องการให้เป็นเช่นนั้น:

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