Pinentry ล้มเหลวด้วย gpg-agent และ SSH


12

ฉันกำลังใช้งาน Fedora 22 ฉันกำลังพยายามตั้งค่า GnuPG เพื่อให้การเชื่อมต่อ SSH ของฉันผ่านการรับรองความถูกต้องโดยใช้คีย์ย่อยการรับรองความถูกต้อง PGP ของฉันซึ่งอยู่ใน Yubikey Neo ของฉัน

ฉันมีหน่วย systemd เริ่มต้น gpg-agent ดังต่อไปนี้:

/usr/bin/gpg-agent --homedir=%h/.gnupg --daemon --use-standard-socket

และฉันได้เปิดใช้งานการสนับสนุน SSH ในการกำหนดค่า:

enable-ssh-support
pinentry-program /usr/bin/pinentry-gtk

ส่วนอื่น ๆ ของการติดตั้งรวมถึงการเพิ่มkeygripของคีย์ของฉันไปที่~/.gnupg/sshcontrolไฟล์เพิ่มของฉันคีย์สาธารณะไปยังพื้นที่ห่างไกลและประกาศตัวแปรสภาพแวดล้อม

การดูบันทึกต่าง ๆ ที่การตั้งค่าดูเหมือนจะใช้งานได้ทั่วโลกฉันจะเห็นว่า SSH พบกุญแจ แต่จริง ๆ แล้วไม่สามารถลงชื่อด้วยได้ หากฉันดูบันทึกจากgpg-agentฉันจะเห็นว่ามันไม่สามารถเปิดpinentryโปรแกรมและดังนั้นจึงไม่ขอรหัส PIN:

2015-07-22 23:23:28 gpg-agent[6758] DBG: error calling pinentry: Ioctl() inappropriate for a device <Pinentry>
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_8 -> BYE
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 -> CAN
2015-07-22 23:23:28 gpg-agent[6758] DBG: chan_7 <- ERR 100663573 The IPC call was canceled <SCD>
2015-07-22 23:23:28 gpg-agent[6758] smartcard signing failed: Ioctl() inappropriate for a device
2015-07-22 23:23:28 gpg-agent[6758] ssh sign request failed: Ioctl() inappropriate for a device <Pinentry>

สิ่งที่เราเห็นที่นี่คือเมื่อใช้ร่วมกับ SSH การเรียก ioctl บางอย่างล้มเหลวเมื่อเรียก pinentry อย่างไรก็ตามถ้าฉันเรียกใช้ต่อไปนี้:

$ echo "Test" | gpg2 -s

หน้าต่าง PIN ปรากฏขึ้นและทำงานได้ดี

คุณช่วยฉันเข้าใจไหมว่าเกิดอะไรขึ้นกับการตั้งค่านี้และ SSH


ฉันได้รับ "ปัญหาที่คล้ายกันกับตัวแทน: ข้อผิดพลาด ioctl ที่ไม่เหมาะสมสำหรับอุปกรณ์" พยายามที่จะไพพ์เอาท์พุทของtarไปยังgpg2บน Mac OS X และคำตอบของ vigoแก้ไขให้ฉัน
Kenny Evitt

คำตอบ:


17

นี่มันใช้ได้กับฉัน:

export GPG_TTY=`tty`

เพิ่มลงในของคุณ.bashrcหรือเพียงแค่เตะมันก่อนที่จะใช้ gpg


10

ฉันพบคำตอบในเว็บไซต์ GPGแล้ว เอเจนต์ไม่พบหน้าจอที่จะแสดงหน้าต่าง Pinentry ฉันต้องใส่สิ่งต่อไปนี้ใน.*shrcไฟล์ของฉัน:

echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1

ขอบคุณ! สิ่งนี้ช่วยในการระบุปัญหา (หน้าต่าง pinentry ไม่แสดงขึ้นมา) อย่างไรก็ตามคำสั่งดังกล่าวไม่ทำงานสำหรับฉัน ถ้าฉันทำgpg-connect-agentมันออกcan't connect to the agent: IPC connect call failedมา gpg-agentทำงานได้ดีและGPG_AGENT_INFOมีการตั้งค่า env vars อย่างเหมาะสม

ที่น่าสนใจเพิ่มexport GPG_AGENT_INFOเพื่อแก้ไขปัญหาดังกล่าวข้างต้นด้วย.bashrc gpg-connect-agent IPC connect call failedฉันไม่ได้เพิ่มสิ่งนี้ก่อนหน้านี้เพราะecho $GPG_AGENT_INFOในเปลือกของฉันไม่เป็นไร .. แต่ปรากฎว่ายังจำเป็น

1
ฉันชอบที่จะรู้ว่าหลายคนคัดลอกคำสั่งนี้และสงสัยว่าทำไมพวกเขามีไฟล์ที่เรียกว่า "1" ในโฟลเดอร์ผู้ใช้ของพวกเขา ..
คีนัน Sulayman

1
@KenanSulayman จับดี ฉันแก้ไขคำสั่ง
Spack

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