ฉันจะรับ GPG Agent เพื่อแคชรหัสผ่านของฉันได้อย่างไร


21

ฉันเป็นนักพัฒนาและฉันมักจะลงนามในสัญญา Git ของฉันด้วยรหัส GPG ของฉัน ฉันสามารถทำให้ GPG Agent ทำงานได้อย่างถูกต้องบน OSX เพื่อให้ฉันขอรหัสผ่านของฉันวันละครั้งเท่านั้น แต่ฉันมีปัญหาในการทำงานกับ Ubuntu 16.04

นี่คือสิ่งที่ฉันทำ:

  • ฉันมีการตั้งค่าคีย์ GPG ของฉัน / เป็นต้น
  • ฉันอยู่ในไดเรกทอรี Git
  • ฉันเพิ่มไฟล์ลงใน Git
  • ฉันจะคอมมิทพวกเขา ( git commit) และรับคำขอรหัสผ่าน GPG ที่มีลักษณะดังนี้:

    $ git ci
    
    You need a passphrase to unlock the secret key for
    user: "Randall Degges <r@rdegges.com>"
    4096-bit RSA key, ID 8F700DA2, created 2016-04-05
    
    [master 1740961] blah
     1 file changed, 1 insertion(+)
    

ปัญหาคือ: ทุกครั้งที่ฉันกระทำฉันจะขอรหัสผ่าน GPG อีกครั้ง

สิ่งที่ฉันต้องการจะทำคือกำหนดค่าตัวแทน GPG ให้แคชรหัสผ่านของฉันเป็นเวลา 1 วันเต็มดังนั้นจะต้องป้อนครั้งเดียวเท่านั้น

ฉันได้อ่านเอกสารและบล็อกโพสต์มากมายและนี่คือสิ่งที่ฉันได้ลองมาแล้ว ...

ก่อนอื่นฉันแก้ไข~/.zshrcไฟล์ (ฉันใช้ zsh) เพื่อตั้งค่าต่อไปนี้:

# GPG Agent
export GPG_TTY=$(tty)
export GPGKEY=8F700DA2

ตอนนี้จากสิ่งที่ฉันอ่านคนเดียวนี้ควรทำเคล็ดลับหลังจากรีสตาร์ท gpg-agent แต่ไม่ได้

ดังนั้นสิ่งต่อไปที่ฉันทำคือฉันกำหนด~/.gnupg/gpg-agent.confไฟล์ตามที่อธิบายไว้ในman gpg-agentหน้า:

# Set the default cache time to 1 day.
default-cache-ttl       86400
default-cache-ttl-ssh   86400

# Set the max cache time to 30 days.
max-cache-ttl           2592000
max-cache-ttl-ssh       2592000

สิ่งนี้ก็ไม่มีผลเช่นกัน

ฉันได้ลองวิธีการบล็อกต่าง ๆ ฯลฯ แต่ดูเหมือนว่าจะไม่มีอะไรทำงาน ใครช่วยชี้ให้ฉันในสิ่งที่ฉันอาจหายไป?

คำตอบ:


24

นอกเหนือจากการตั้งค่าแคชในgpg-agent.confคุณต้องตรวจสอบให้แน่ใจว่า GnuPG นั้นเชื่อมgpg-agentต่อ โดยทั่วไปแล้ว GnuPG 2 ขึ้นไปจะทำเช่นนั้น แต่สาขา GnuPG 1 ไม่ได้ โดยค่าเริ่มต้น git ใช้gpgไบนารีซึ่ง (ในเวลาที่เขียนคำตอบนี้) ยังคงเป็น GnuPG 1 ในขณะที่ GnuPG 2 ได้รับการติดตั้งเหมือนgpg2ในระบบส่วนใหญ่

ในท้ายที่สุดคุณมีสองความเป็นไปได้:

  • ตั้งค่า git ให้ใช้gpg2โดยเปลี่ยนการกำหนดค่า git:

    git config --global gpg.program gpg2
    
  • ตั้งค่าgpg(GnuPG 1) เพื่อการใช้งานgpg-agentโดยการเพิ่มuse-agentการgpg.conf

0

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

หากใช้git config --global gpg.program gpg2งานได้สำหรับคุณ แต่คุณไม่ต้องการปล่อยให้อยู่ในการกำหนดค่า git ของคุณ (ในกรณีของฉันเพราะฉันใช้การตั้งค่าเดียวกันบน macOS) จากนั้นคุณสามารถสลับค่าเริ่มต้นgpgออกได้

ฉันทำตามคำแนะนำที่นี่ซึ่งเป็นเพียง:

$ sudo mv /usr/bin/gpg /usr/bin/gpg1
$ sudo update-alternatives --verbose --install /usr/bin/gpg gnupg /usr/bin/gpg2 50

สิ่งนี้ทำให้ไบนารีgpg1เก่าgpgและ symlink /usr/bin/gpg -> /usr/bin/gpg2(พร้อมชื่อ gnupg และลำดับความสำคัญ 50)

gpgในทางทฤษฎีแล้วการเปลี่ยนแปลงค่าเริ่มต้นอาจทำลายแพ็คเกจบางส่วนในระบบของคุณ แต่ Debian Stretch (เวอร์ชันเสถียรปัจจุบันของ Debian) ตั้งค่าgpg2เป็นค่าเริ่มต้นgpgในลักษณะเดียวกันดังนั้นคุณไม่ควรมีปัญหามากเกินไป

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