ฉันตัดสินใจที่จะดูอีกครั้งและพบว่ามันทำงานอย่างไร 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
gpg-connect-agent
ไหม?