ฉันจะใช้ gpg-agent เช่นเดียวกับ ssh-agent + ssh-add ได้อย่างไร


15

ssh-agentssh-add keyfileเป็นเรื่องง่ายมากที่จะใช้ผมเริ่มต้นและเพิ่มปุ่มใช้ หลังจากฆ่ากระบวนการssh-agentไฟล์ทั้งหมดจะหายไป

ฉันจะมีพฤติกรรมแบบเดียวกันได้gpg-agentอย่างไร gpg-preset-passphraseที่อยู่ใกล้โปรแกรมที่ฉันพบคือ แต่ดูที่หน้าคู่มือของgpg-agentดูเหมือนว่าไดเรกทอรีถูกสร้างขึ้นสำหรับการจัดเก็บคีย์ส่วนตัว

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


คุณเช็คเอาท์gpg-connect-agentไหม?
Smithamax

@Smithamax Nope gpg-preset-passphraseแต่มันดูเหมือนว่าจะใช้ฟังก์ชันการทำงานเดียวกันจาก ฉันวิ่งgpg-connect-agentได้รับกระสุนและประมวลผลsetkey IDOFMYPRIVATEKEYHEREแล้วตามด้วยpreset_passphraseและ id ส่งผลให้ "ERR 67108924 ไม่สนับสนุน <GPG-agent> - ไม่ - อนุญาตให้พิมพ์รหัสผ่านไม่ได้"
Lekensteyn

คำตอบ:


13

ฉันตัดสินใจที่จะดูอีกครั้งและพบว่ามันทำงานอย่างไร GPG ใช้คำว่า "แคช" สำหรับเก็บรหัสผ่าน สามารถกำหนดข้อ จำกัด สองข้อในเวลาการจัดเก็บสูงสุด:

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

นอกจากนี้ยังมีการเปลี่ยนแปลงสองแบบสำหรับทั้งข้อ จำกัด หนึ่งแบบสำหรับคีย์ GPG และอีกหนึ่งแบบสำหรับคีย์ SSH (หากเปิดใช้การสนับสนุน)

รายการหน้าคู่มือที่เกี่ยวข้องจากgpg-agent(1):

   --default-cache-ttl n
          Set  the  time a cache entry is valid to n seconds.  The default
          is 600 seconds.

   --default-cache-ttl-ssh n
          Set the time a cache entry used for SSH keys is valid to n  sec‐
          onds.  The default is 1800 seconds.

   --max-cache-ttl n
          Set the maximum time a cache entry is valid to n seconds.  After
          this time a cache entry will be expired  even  if  it  has  been
          accessed recently.  The default is 2 hours (7200 seconds).

   --max-cache-ttl-ssh n
          Set the maximum time a cache entry used for SSH keys is valid to
          n seconds.  After this time a cache entry will be  expired  even
          if  it has been accessed recently.  The default is 2 hours (7200
          seconds).

วลีรหัสผ่านจะถูกเก็บไว้เสมอ (ในหน่วยความจำไม่ได้อยู่บนดิสก์! ตรวจสอบแล้วมี repo คอมไพล์ของ$HOME) ssh-addดังนั้นจึงไม่มีความจำเป็นที่ชัดเจนสำหรับ ตัวอย่างเช่นการลงชื่อข้อมูลดัมมี่ทริกเกอร์แคชอยู่แล้ว:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

หากต้องการเปลี่ยนแปลงการตั้งค่าแคชอย่างถาวรของ gpg-agent ให้แก้ไข ~ / .gnupg / gpg-agent.conf` แล้วเพิ่มดังนี้:

default-cache-ttl  60     # Expire GPG keys when unused for 1 minute
max-cache-ttl     600     # Expire GPG keys after 10 minutes since addition

ผมได้พยายามที่จะใช้การสนับสนุนตัวแทน SSH โดยระบุenable-ssh-supportแต่นี้จะทำให้ gpg ~/.gnupg/private-keys.d/ตัวแทนขอกุญแจอีกดอกหนึ่งในการเข้ารหัสคีย์และแล้วเก็บกุญแจส่วนตัวของคุณ ไม่เป็นไรสำหรับฉันฉันจะใช้แนวทางสอง ssh-agent / gpg-agent

เคล็ดลับโบนัส:

  • max-cache-ttl-sshสามารถระบุเทียบเท่าของตัวแทน SSH เมื่อเพิ่มคีย์ตัวอย่างเช่น:ssh-add -t 600 ~/.ssh/id_rsa
  • เพื่อป้องกันการจัดเก็บข้อความรหัสผ่าน GPG ในตัวแทนให้ปิดการใช้งานตัวแทน ใน GPG เวอร์ชั่นที่ใหม่กว่าตัวเลือก--no-use-agentนี้จะถูกละเว้น แต่คุณสามารถป้องกันไม่ให้ตัวแทนใช้งานโดยการล้างตัวแปรสภาพแวดล้อมที่เกี่ยวข้อง บางวิธีที่จะทำ:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    

เครื่องของฉันขอรหัสผ่านซ้ำแล้วซ้ำอีก
ดอนสดใส

@donbright คุณแน่ใจหรือว่ามีเพียงรายการเดียวที่เปิดgpg-agentใช้งานอยู่หรือไม่ (ตรวจสอบรายการกระบวนการตัวอย่างเช่นps u -C gpg-agent) ตั้งค่าการหมดเวลาแคชไว้อย่างเหมาะสมหรือไม่ หากคุณใช้เพื่อลงนาม (ตรงข้ามกับการรับรองความถูกต้อง (SSH)) ignore-cache-for-signingตัวเลือกจะถูกตั้งค่าหรือไม่?
Lekensteyn

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