วิธีกำหนดค่า gpg ให้ป้อนวลีรหัสผ่านเพียงครั้งเดียวต่อเซสชัน


18

เป็นไปได้หรือไม่ที่จะกำหนดค่าgpgในวิธีที่ฉันป้อนข้อความรหัสผ่านเพียงครั้งเดียวและจะใช้ได้ทั้งเซสชัน (ฉันกำลังใช้Ubuntu/XFce)

ฉันไม่แน่ใจว่าวิธีการgpgทำงานดูเหมือนว่าฟังก์ชั่นเริ่มต้นคือการgpgถามgpg-agentวลีรหัสผ่านและตัวแทนเรียกใช้ขาเข้าเพื่อขอข้อความรหัสผ่าน

ฉันต้องการใช้ pinentry-curses เพียงครั้งเดียวต่อเซสชันดังนั้นฉันจึงสามารถวางข้อความรหัสผ่านของฉัน (ฉันมีhexสตริงจากประโยค - ฉันใช้echo -n <SENTENCE> | str-hex) และลงชื่ออีเมลจาก Claws Mail โดยไม่ใส่ข้อความรหัสผ่าน (คุณไม่สามารถใช้ pinentry-curses กับ Claws ได้ Mail)

คำตอบ:


16

คุณสามารถใช้เทคนิคที่อธิบายไว้ในหน้านี้:

http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent

นี่คือส่วนสำคัญ:

  1. ติดตั้งโปรแกรม gpg-agent และ pinentry:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. ~/.profileเพิ่มบรรทัดด้านล่างไป เชลล์ที่ยืนยัน POSIX ใด ๆ ควรมีไฟล์นี้

    # Invoke GnuPG-Agent the first time we login.
    # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
    if test -f $HOME/.gpg-agent-info && \
        kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
        GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
    else
        # No, gpg-agent not available; start gpg-agent
        eval `gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info`
    fi
    export GPG_TTY=`tty`
    export GPG_AGENT_INFO
    

    สคริปต์เล็กน้อยนี้จะเปิดใช้งานเมื่อคุณเข้าสู่ระบบ หากเอเจนต์ไม่ทำงานมันจะเริ่มขึ้น เมื่อตัวแทนเริ่มต้นมันจะแสดงวิธีการตั้งค่าตัวแปรสภาพแวดล้อมเพื่อเชื่อมต่อกับมัน สคริปต์บันทึกค่าเหล่านี้ใน~/.gpg-agent-infoดังนั้นเมื่อคุณเริ่มเซสชันการล็อกอินอื่นสคริปต์สามารถตั้งค่าตัวแปรได้อย่างถูกต้องและใช้เอเจนต์

คุณจะต้องป้อนข้อความรหัสผ่านของคุณหนึ่งครั้งต่อการบูต ตัวแทนจะเก็บกุญแจของคุณไว้ในหน่วยความจำคุณจึงไม่ต้องป้อนข้อความรหัสผ่านอีกครั้ง


ฉันใช้สคริปต์นี้อย่างมีความสุข แต่มันจะล้มเหลวแบบสุ่ม ในที่สุดฉันแก้ไขเงื่อนไขนี้GPG_PROCESS=`cut -d: -f 2 $HOME/.gpg-agent-info` if test -f $HOME/.gpg-agent-info && \ kill -0 ${GPG_PROCESS} 2>/dev/null && \ [[ ${GPG_PROCESS} == `pgrep -x -u "${USER}" gpg-agent` ]] ; thenและทำงานได้ดี ปัญหาคือสคริปต์ข้างต้นตรวจสอบว่ากระบวนการใน.gpg-agent-infoยังมีชีวิตอยู่และรับสัญญาณด้วยkill -0หรือไม่ หากกระบวนการอยู่ที่นั่น แต่ไม่ใช่gpg-agentเราจะได้รับพฤติกรรมที่ไม่ถูกต้อง รหัสที่แนบมาตรวจสอบว่าเรามีกระบวนการที่ถูกต้อง
wyer33
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.