แคชรหัสผ่านคีย์ย่อย gpg ทั้งหมดในครั้งเดียว? ป้องกันความจำเป็นในการป้อนรหัสผ่าน gpg หลายรายการหรือไม่


10

ฉันสามารถป้อนรหัสผ่าน gpg เพียงครั้งเดียวและปลดล็อคคีย์ย่อยทั้งหมดของฉัน (การเซ็นการถอดรหัสการรับรองความถูกต้อง) ได้หรือไม่

ในตอนนี้ฉันต้องป้อนรหัสผ่าน gpg ของฉันสามครั้ง (สำหรับการเซ็นชื่อเพื่อถอดรหัสเพื่อการรับรองความถูกต้อง) สิ่งนี้ไม่สะดวก

ฉันพยายามหาเชลล์สคริปต์

#!/bin/bash
set -x
set -e
set +o history

signing_key=77BB3C48
encryption_key=CE998547

tempfile="$(mktemp)"
echo "test" > testfile

unset passphrase || exit 1
read -sp 'Enter password. ' passphrase ; echo

exec 3<<<"$passphrase"

gpg2 --no-tty --use-agent --batch --yes --passphrase-fd 3 --sign-with "$signing_key" --clearsign "$tempfile"
gpg2 --no-tty --use-agent --verify "$tempfile.asc"

gpg2 --no-tty --use-agent --yes --armor --recipient "$encryption_key" --encrypt "$tempfile"

exec 3<<<"$passphrase"
gpg2 --no-tty --use-agent --batch --decrypt --passphrase-fd 3 "$tempfile.asc"

แต่น่าเสียดายที่วิธีการใช้รหัสผ่าน gnupg-agent ไม่ได้เก็บรหัสผ่านไว้ สามารถแก้ไขได้หรือไม่

ข้อมูลระบบ:

  • เมื่อไม่ได้ใช้เชลล์สคริปต์นั้นฉันไม่มีปัญหากับ gnupg-agent เมื่อฉันลงนาม / ถอดรหัสไฟล์ใน shell ด้วยตนเอง pinentry จะขอรหัสผ่านสองครั้งจากนั้นแคชจนกว่าจะรีบูต
  • ใช้ Debian Wheezy
  • รุ่น gpg:

dpkg -l | grep gnupg

ii  gnupg                                        1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement
ii  gnupg-agent                                  2.0.22-3                           i386         GNU privacy guard - password agent
ii  gnupg-curl                                   1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement (cURL)
ii  gnupg2                                       2.0.22-3                           i386         GNU privacy guard - a free PGP replacement (new v2.x)

ฉันได้ขอให้รายชื่อผู้รับจดหมาย gnupg ผู้ใช้อยู่พักหนึ่งแล้ว แต่ไม่มีการตอบกลับ

บางทีคำตอบนี้อาจใช้ได้ อาจgpg-connect-agentจะต้อง?


ฉันประทับใจ: exec 3<<<"$passphrase"ยังใหม่สำหรับฉัน ... และฉันเพิ่งโยน 250 ตัวแทนเงินรางวัลที่คำตอบที่คุณอ้าง
Hauke ​​Laging

คำตอบ:


3

มีgnome-keyring-daemonและseahorseซึ่งทำให้การจัดการคีย์และรหัสผ่านง่ายมาก

โดยทั่วไปหากคุณใช้ gnome-keyring-daemon เป็นเอเจนต์ gpg มันจะสามารถปลดล็อคกุญแจ GPG ของคุณโดยอัตโนมัติ ทำได้โดยการรักษารหัสผ่านของรหัสผ่านซึ่งมีรหัสผ่านสำหรับสิ่งต่าง ๆ เช่นเว็บไซต์รหัส GPG รหัส SSH เป็นต้นรหัสผ่านนี้จะถูกรักษาความปลอดภัยด้วยรหัสผ่านของตัวเอง ดังนั้นคุณจึงปลดล็อคและพวงกุญแจ gnome จะปลดล็อคทุกอย่าง
ในฐานะโบนัสที่เพิ่มขึ้น gnome-keyring-daemon มีพวงกุญแจ "เข้าสู่ระบบ" ซึ่งหากรหัสผ่านตรงกับรหัสผ่านผู้ใช้ของคุณพวงกุญแจจะถูกปลดล็อคโดยอัตโนมัติเมื่อคุณเข้าสู่ระบบ


องค์ประกอบ

ทำอย่างไรถึงจะทำงานนี้ได้? เพียงติดตั้ง gnome-keyring-daemon และ seahorse แพ็คเกจควรทำการกำหนดค่าระบบทั้งหมดสำหรับคุณ เพียงให้แน่ใจว่าคุณไม่ได้เริ่มต้นภูตพวงกุญแจอื่นหรือตัวแทนจีพีจี แล้วแต่จำนวนใดจะเริ่ม "ชนะ" ครั้งสุดท้ายและพวงกุญแจ gnome เริ่มต้นในสแต็ค PAM ดังนั้นเร็วมาก

หากเก็บกุญแจ GPG ของคุณไว้ปุ่มดัง~/.gnupgกล่าวจะรับโดยอัตโนมัติและทำหน้าที่เป็นตัวแทน GPG สำหรับพวกเขา กันไปสำหรับคีย์ SSH ที่เก็บไว้ใน~/.ssh

ครั้งแรกที่คุณพยายามใช้คีย์ส่วนตัวคุณจะได้รับกล่องโต้ตอบที่มีลักษณะดังนี้: (ฉันเรียกใช้โดยใช้บรรทัดคำสั่งแบบง่ายgpg -d myfile.gpg) ปลดล็อคพวงกุญแจ
เพียงแค่เลือก "ปลดล็อกพวงกุญแจนี้โดยอัตโนมัติทุกครั้งที่ฉันลงชื่อเข้าใช้"

ตอนนี้เรายังไม่ได้พูดถึงม้านำ้า นั่นเป็นเพราะมันไม่จำเป็นอย่างเคร่งครัด ทั้งหมดนี้ทำด้วย gnome-keyring-daemon ปกติเท่านั้น อย่างไรก็ตามด้วยม้าน้ำคุณสามารถดูและจัดการคีย์และคีย์ทั้งหมดของคุณ และถ้าคุณใช้การพิสูจน์ตัวตนแบบรวมศูนย์ (LDAP) คุณจะต้องใช้มันเมื่อคุณเปลี่ยนรหัสผ่านการเข้าสู่ระบบเพื่อเปลี่ยนรหัสผ่านในพวงกุญแจ "เข้าสู่ระบบ" เพื่อให้ตรงกับมัน

ม้าน้ำ - ปุ่ม gpg


รหัสผ่านอื่น ๆ

ตามที่กล่าวถึงก่อนหน้านี้ gnome-keyring-daemon ยังสามารถจัดเก็บรหัสผ่านของเว็บไซต์ได้ ครั้งล่าสุดที่ฉันตรวจสอบโครเมี่ยมรองรับสิ่งนี้ แต่ Firefox ไม่ได้ อย่างไรก็ตามมีเคล็ดลับอย่างหนึ่งในการทำให้มันใช้งานได้
โดยค่าเริ่มต้นคุณจะมี 2 keyrings พวงกุญแจ "เข้าสู่ระบบ" และพวงกุญแจ "เริ่มต้น" พวงกุญแจ "เริ่มต้น" เป็นค่าเริ่มต้น (จึงเป็นชื่อ) แต่มันเป็นพวงกุญแจที่แยกต่างหากดังนั้นมันจะไม่ถูกปลดล็อคโดยอัตโนมัติ ในม้าน้ำหากคุณคลิกขวาที่ปุ่ม "เข้าสู่ระบบ" จะมีตัวเลือก "ตั้งเป็นค่าเริ่มต้น" เลือกตัวเลือกนี้และจะเริ่มใช้รหัสผ่าน ฉันเป็นการส่วนตัวเพียงลบ "เริ่มต้น" หนึ่งและใช้ "เข้าสู่ระบบ" สำหรับทุกสิ่ง


น่าเสียดายที่ฉันไม่ใช่ผู้ใช้คำพังเพย ฉันไม่ได้และsudo apt-get remove gnupg-agent sudo apt-get install gnome-keyring seahorseจากนั้นสร้างไฟล์ที่/etc/X11/Xsession.d/999gnomekeyringมีเนื้อหาดังต่อไปนี้ eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) export GNOME_KEYRING_CONTROL GNOME_KEYRING_PID GPG_AGENT_INFO SSH_AUTH_SOCK(ไม่เช่นนั้น gnome-keyring จะไม่เริ่มแม้แต่ใน KDE) ตอนนี้เมื่อฉันเรียกใช้gpg -d myfile.gpgฉันจะถูกถามรหัสผ่านและจะถูกแคช แต่ฉันไม่เคยได้รับพร้อมท์ในกล่องโต้ตอบนี้
adrelanos

(นี่เป็นสิ่งที่ไม่ดีเพราะฉันกลับมาแล้วเมื่อฉันเริ่มต้นคีย์การเซ็นชื่อจะถูกเก็บแยกต่างหาก) (มีบรรทัดใหม่ระหว่างบรรทัด eval และสายการส่งออกซึ่งเป็นไปไม่ได้ที่จะมีเครื่องหมายแสดงความคิดเห็นที่นี่)
adrelanos

ฉันไม่ได้ใช้ gnome สำหรับผู้จัดการเดสก์ท็อปของฉันด้วย มันไม่จำเป็น Gnome ทำอะไรได้มากกว่าผู้จัดการเดสก์ท็อป /etc/X11/Xsession.dคุณไม่ควรจะต้องเพิ่มอะไรให้ ที่ควรจะทำในกอง PAM คุณควรจะมีรายการในหนึ่งหรือมากกว่าหนึ่งไฟล์ในsession optional pam_gnome_keyring.so auto_start /etc/pam.dน่าเสียดายที่ฉันไม่ได้ใช้เดเบียนดังนั้นฉันไม่รู้ว่าจะใช้อันไหน หากไม่ได้มีนั่นคือปัญหา
Patrick

โดยไม่ต้องเพิ่มการ/etc/X11/Xsession.d, ps aux | grep gnomeแสดงให้เห็นว่า gnome-พวงกุญแจมอนไม่ได้เริ่มต้น (อย่างไรก็ตามลบมันออก) /usr/share/doc/libpam-gnome-keyring/README.Debianพูดว่าIf you want to start gnome_keyring from another display manager, you need to add the following lines to the corresponding /etc/pam.d/?dm file: auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start(ขึ้นบรรทัดใหม่ถูกลบออกโดยความเห็น se) ทำเช่นนั้นแล้วเพิ่มลงใน/etc/pam.d/kdmkdm ที่รีสตาร์ทแล้ว ไม่มีการโหลดตัวแทนไม่มีอยู่
adrelanos

ฉันกำลังสูญเสีย หากคุณกำลังใช้kdmและคุณใส่ไว้ใน/etc/pam.d/kdmที่ควรจะทำ สิ่งเดียวที่ฉันสามารถแนะนำถ้าคุณยังต้องการติดตามเส้นทางนี้คือขุดผ่านบันทึก ขออภัยในความหวังที่ผิดคิดว่านี่จะเป็นวิธีแก้ปัญหาที่ง่ายสำหรับคุณ
Patrick

0

ฉันได้ทำการตรวจสอบบางอย่างแล้วและผลลัพธ์ก็น่าแปลกใจสำหรับฉัน แต่ง่าย ๆ :

เมื่อเรียกว่าวิธีgpgนี้ไม่สื่อสารกับgpg-agent เลย ! gpgมีความสามารถในการดำเนินการเหล่านี้ด้วยตัวเอง

แต่ถ้าgpg-agentไม่รู้ด้วยซ้ำว่ามีบางอย่างเกิดขึ้นมันก็ยากที่จะรู้วลีรหัสผ่านที่ไม่เคยรู้มาก่อน


ดูเหมือนว่าฉันจะค้นพบวิธีที่สิ่งนี้ไม่สามารถแก้ไขได้
adrelanos

คำถามเดิมของฉันยังคงเปิดอยู่ (อันไหนCan I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?) ฉันหวังว่าจะใส่รหัสผ่านลงไปgpg-agentหรือgpg-connect-agentเป็นไปได้
adrelanos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.