我最近在虚拟机中设置了 Ubuntu 来进行开发工作,但发现 git 无法签署我的提交。进一步调查,我发现 gpg-agent 无法通过 pinentry-curses 请求我的密码,从而产生错误Inappropriate ioctl for device
,即使我的GPG_TTY
设置正确:
$ echo 'this is a test' | gpg --status-fd=2 -bsau <<my-key-short>>
[GNUPG:] KEY_CONSIDERED <<my-key-long>> 2
[GNUPG:] BEGIN_SIGNING H8
[GNUPG:] PINENTRY_LAUNCHED 1207
gpg: signing failed: Inappropriate ioctl for device
[GNUPG:] FAILURE sign 83918950
gpg: signing failed: Inappropriate ioctl for device
$ echo $GPG_TTY
/dev/pts/0
但是,如果我杀死 gpg-agent 并手动启动它(使用与 ps 报告的自动启动代理完全相同的参数),那么它就能够提示我输入密码和签名,没有问题:
$ ps x
PID TTY STAT TIME COMMAND
922 ? S 0:00 sshd: five35@pts/0
923 pts/0 Ss 0:00 -bash
1205 ? Ss 0:00 gpg-agent --homedir /home/five35/.gnupg --use-standard-socket --daemon
1224 pts/0 R+ 0:00 ps x
$ gpgconf --kill gpg-agent
$ gpg-agent --homedir /home/five35/.gnupg --use-standard-socket --daemon
gpg-agent[1276]: WARNING: "--use-standard-socket" is an obsolete option - it has no effect
gpg-agent[1277]: gpg-agent (GnuPG) 2.1.15 started
$ echo 'this is a test' | gpg --status-fd=2 -bsau <<my-key-short>>
[GNUPG:] KEY_CONSIDERED <<my-key-long>> 2
[GNUPG:] BEGIN_SIGNING H8
[GNUPG:] PINENTRY_LAUNCHED 1295
[GNUPG:] SIG_CREATED D 1 8 00 1503763837 <<my-key-long>>
-----BEGIN PGP SIGNATURE-----
iQIcBAABCAAGBQJZoZ19AAoJEKT/kfDdu6RyXJYP/RBNUVXFkWahcYcaGs4LkC5Y
G9bcMnNgGdVZt5XXq28jjc3KRNkwC1taHK+TcNutGoK7vbnnB8dmZ2/M5mHkvzCt
Cdm7YBp0QevUIRNoJis402/nmBXG3wEwne97B0kC32aY6i2pPMl+x0ZVbrZ15mXk
mhvk+Yd126x/HQ2B5buFN1rnh1oXdm6vo6EZXjTI6uCYlEeIMJUqdWhys7lf2TNr
3wCyrVvPx44RY92vtKSdJW0eZNhzMqdopjyaO/TPMPZxQiH7t0/rJk98eLyEAkBT
kcW6iDTwZWWgA3I4X1Q0JIKnc33jRXnOuLWcPEOSYKczssQx6xXNS43vskaaz2Rz
/U6NsaF0BuTQY9LcT1nKRwyoB1SXPgBss0j/E0MvZEHYTQfRPuAffJgZvQyIEjGf
6DPicQ45hltPaiFekXtTBd47ilyvyWCYO6qnCjDpTFxLXw3y4PseA79GrkQ2YRiS
Tzb6faW+/pgFlcXpMpCZATGde0o/KQZdTSZ5TpvlAf4N8uBdppObxuhDnzS2BeR6
/pqmP+/cw+txb7peNrvbIjwQcNsAkp5M8lG0hPJEecHXkivEck7zsgC6ua+Fy/Ic
3LicU01YvzIGq2r703pZpFWcoayPEdn5BCtyRElwON/Vk98930QCOu65WqF4WOmJ
s1k429ihGjgTRqzOT6by
=uv8j
-----END PGP SIGNATURE-----
此外,如果我打开多个终端(SSH 会话),系统将始终提示我在手动启动 gpg-agent 的终端上输入密码。
我该如何解决这个问题?我已经添加export GPG_TTY=$(tty)
到我的 .bashrc (其结果可以在上面看到),运行echo "UPDATESTARTUPTTY" | gpg-connect-agent
,将 my 更改TERM
为 just xterm
,然后取消设置DISPLAY
。不幸的是,这些似乎都没有产生任何效果。
主机系统:
- Windows 10 家庭版 64 位 1703 15063.540
- 腻子 0.70 64 位
客户端系统:
- 乌班图17.04
- GPG 2.1.15
- gpg 代理 2.1.15
- pinentry-curses 1.0.0