คีย์ GPG และ SSH สามารถใช้ร่วมกันได้หรือไม่


70

ฉันต้องการสร้างRSAรหัสGPGและใช้ในการSSHเข้าสู่ระบบ เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร

แก้ไข: ดูคำตอบ @ wwerner ของฉันไม่ได้ลอง แต่ดูเหมือนจะเป็นทางออกปัจจุบัน (ณ ปี 2018)

คำตอบ:


26

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่สำหรับคนอย่างฉันสะดุดนี้

ตอนนี้มันเป็น (ตั้งแต่ gpg 2.1) เป็นไปได้ที่จะเพียงแค่ดึงกุญแจ SSH gpg --export-ssh-key <key id>!โดยตรงโดยใช้จีพีจี:

!เครื่องหมายเป็นตัวเลือกก็จะทำให้คีย์หลักที่ส่งสินค้าออกและละเว้นการตรวจสอบว่าที่สำคัญคือการตรวจสอบที่มีความสามารถ ([CA])

รายละเอียด:


คำตอบนี้ควรเป็นคำตอบที่ยอมรับได้ :)
Inkeliz

30

ฉันกำลังทำวิจัยเกี่ยวกับหัวข้อนี้และฉันสามารถให้คำแนะนำแก่คุณ แต่ฉันยังไม่พบวิธีที่จะทำให้การทำงาน

Monkeysphere

Monkeysphereดูเหมือนจะเป็นโครงการที่น่าสนใจมาก แต่ฉันไม่สามารถคอมไพล์ได้ใน Mac OS X โดยไม่อุดตันพื้นที่ว่างในดิสก์ของฉันกับ MacPorts

ใช้ gpgkey2ssh

วิธีแรกที่ฉันแนะนำให้คุณลองคือสร้างรายการ authorized_keys ที่เข้ากันได้จากรหัสคีย์ของคุณ (เช่น BFB2E5E3) ด้วย

gpgkey2ssh BFB2E5E3 | tee -a ~/.ssh/authorized_keys

นี่ฉันเพิ่มไปยัง localhost ของฉันตั้งแต่ฉันวิ่งเซิร์ฟเวอร์ SSH สำหรับวัตถุประสงค์ในการทดสอบ ~/.ssh/authorized_keysแต่แน่นอนคุณควรเพิ่มนี้ไปยังพื้นที่เป้าหมาย ต่อไปคุณจะต้องบอก SSH ให้ใช้ส่วนส่วนตัวของคีย์นี้ในระหว่างการตรวจสอบสิทธิ์ แต่เพียงส่งออกคีย์แพร์รุ่น ASCII ที่หุ้มเกราะไม่ทำงาน:

gpg --armor --export-secret-key BFB2E5E3! |tee ~/.ssh/id_rsa
gpg --armor --export BFB2E5E3! | tee ~/.ssh/id_rsa.pub
chmod 400 ~/.ssh/id_rsa
ssh localhost

ใช้ gpg-agent

gpg-agentมีตัวเลือกที่ช่วยให้สามารถใช้งานได้เป็นแทนหล่นในสำหรับที่รู้จักกันดี--enable-ssh-support ssh-agentฉันได้อ่านบางคนที่พยายามเพิ่มผ่านทางssh-addคีย์ GPG ของพวกเขาหลังจากเปิดตัวgpg-agentด้วยวิธีนี้:

gpg-agent --enable-ssh-support --daemon
gpg --armor --export-secret-key BFB2E5E3! | tee ~/.gnupg/exported-keys/BFB2E5E3_sec.asc
ssh-add ~/.gnupg/exported-keys/BFB2E5E3_sec.asc

แต่ฉันไม่คิดว่าสิ่งนี้จะได้ผล manpage gpg ตัวแทนพูดว่า:

คีย์ SSH ซึ่งจะใช้งานผ่านเอเจนต์จำเป็นต้องเพิ่มในเอเจนต์ gpg เริ่มแรกผ่านยูทิลิตี ssh-add เมื่อคีย์ถูกเพิ่ม ssh-add จะถามรหัสผ่านของไฟล์คีย์ที่ให้ไว้และส่งวัสดุสำคัญที่ไม่มีการป้องกันไปยังเอเจนต์ สิ่งนี้ทำให้ gpg-agent ขอ passphrase ซึ่งจะใช้สำหรับการเข้ารหัสคีย์ที่ได้รับใหม่และเก็บไว้ในไดเรกทอรีเฉพาะ gpg-agent

ดังนั้นมันจึงดูเหมือนว่าgpg-agentควรจะใช้เป็นมาตรการเพิ่มเติมเพื่อปกป้องกุญแจ SSH ของคุณด้วยการเข้ารหัส GPG

การแปลงคีย์ GPG เป็น OpenSSH

Jérôme Pouiller ในบล็อกของเขาเขียนว่ายูทิลิตี้ Gpgsm สามารถส่งออกคีย์และใบรับรองใน PCSC12; พวกเขาสามารถใช้งานได้โดย OpenSSH:

gpgsm -o secret-gpg-key.p12 --export-secret-key-p12 0xXXXXXXXX
openssl pkcs12 -in secret-gpg-key.p12 -nocerts -out gpg-key.pem
chmod 600 gpg-key.pem
cp gpg-key.pem ~/.ssh/id_rsa
ssh-keygen -y -f gpg-key.pem > ~/.ssh/id_rsa.pub

แต่ฉันไม่พบวิธีที่จะgpgsmยอมรับคู่กุญแจ gpg ของฉัน

สิ่งอื่น ๆ ที่คุณสามารถลองได้

SSH มี-Iตัวเลือกเพื่อระบุไลบรารีที่แบ่งใช้ PKCS # 11 ที่sshควรใช้เพื่อสื่อสารกับโทเค็น PKCS # 11 ที่จัดเตรียมคีย์ RSA ส่วนตัวของผู้ใช้ ssh-keygenสามารถใช้คีย์สาธารณะหรือไพรเวต RFC4716 / SSH2, คีย์สาธารณะ PEM PKCS8 และกุญแจสาธารณะ PEM เพื่อสร้างคีย์ส่วนตัว (หรือพับลิก) ที่รองรับ OpenSSH โดยใช้ตัวเลือก-iและ-mตัวเลือก

ถึงกระนั้นฉันก็ไม่สามารถหาวิธีที่จะรวมมันเข้าด้วยกันได้


5
โปรดทราบว่าgpgkey2sshถูกแทนที่ด้วย--export-ssh-keyเป็นเวอร์ชัน 2.1.11 (2016-01-26) ฉันใช้เวลาสักพักกว่าจะรู้เรื่องนี้ gpg --export-ssh-key BFB2E5E3การใช้งาน
MayeulC


มีการโพสต์ที่ดีในLinodeแต่พวกเขาใช้ gpg-agent เพื่อตรวจสอบกับ SSH พวกเขาไม่แปลงคีย์ลับ gpg เป็นรหัสส่วนตัว SSH
Xorax

14

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

  1. ใบรับรอง GPG ของคุณจะต้องมีคีย์ย่อยที่มีการตั้งค่าสถานะ "การรับรองความถูกต้อง" ในการสร้างคีย์ย่อยให้รันหนึ่งครั้ง:

    monkeysphere g
    
  2. ตอนนี้เพิ่มคีย์ย่อยการรับรองความถูกต้องของคุณไปยังssh-agent :

    monkeysphere s
    

ค่อนข้างเกี่ยวข้อง: ผู้ใช้ gnupg เธรดนี้


9

ด้วยข้อมูลจากคำตอบของคำถามนี้และความช่วยเหลือของรายชื่อผู้รับจดหมาย gnupg- ผู้ใช้ฉันสามารถหาวิธีใช้คีย์ GPG ของฉันสำหรับการรับรองความถูกต้อง SSH ดังที่ Claudio Floreani ได้กล่าวถึงแล้วในคำตอบของเขามีวิธีที่เป็นไปได้สองสามประการในการทำเช่นนี้

ฉันได้เขียน blogpost เกี่ยวกับวิธีแก้ปัญหาที่เป็นไปได้: http://budts.be/weblog/2012/08/ssh-authentication-with-your-pgp-key

ในการสรุป: ไม่ว่าคุณจะใช้ GnuPG 2.1 ซึ่งขณะนี้อยู่ในช่วงเบต้า เมื่อใช้รุ่นนี้คุณสามารถเริ่มต้น gpg-agent ด้วยตัวเลือก --enable-ssh-support และเพิ่ม keygrip สำหรับคีย์ GPG ของคุณ (หรือคีย์ย่อย) ลงใน ~ / .gnupg / sshcontrol

เมื่อคุณใช้ GnuPG เวอร์ชันเสถียร (2.0.x) ปัจจุบันคุณสามารถใช้ monkeysphere เพื่อเพิ่มคีย์ของคุณใน gpg-agent (อีกครั้งหลังจากเริ่ม gpg-agent ด้วยตัวเลือก --enable-ssh-support)

นอกจากนี้ยังเป็นไปได้ที่จะใช้พวงกุญแจ GNOME (หรือแม้แต่ตัวแทนทั่วไป ssh) ด้วยความช่วยเหลือของลิงสเฟียร์ ปัญหาเดียวในกรณีนี้คือคุณจะต้องเพิ่มคีย์ของคุณอีกครั้งเมื่อเข้าสู่ระบบอีกครั้ง (เป็น Gnome หรือ XFCE) ในการแก้ปัญหานี้คุณสามารถส่งออกคีย์และแปลงด้วยตนเอง

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