配置 GPG pinentry 时出现问题

配置 GPG pinentry 时出现问题

我有两个主机,A 和 B。在 AI 上有gpg pinentry程序设置,pinentry-curses但我不知道我是如何做到的。我似乎找不到 A 和 B 之间的区别,但在 A(没有 GUI)上我无法gpg使用pinentry-curses.在 B 上,无论我是在终端、控制台,还是通过 ssh 连接到另一台主机并返回,似乎并不重要。我总是得到pinentry-curses。在 A 上,由于无法输入 pin,每个操作都会失败。

我不知道还要检查什么。这是我尝试查看的所有内容。

首先,符号pinentry链接:

me@b ~ % ls -l $(dirname $(which pinentry)) | grep pinentry
lrwxrwxrwx 1 root root            14 Dec  8 00:29 pinentry -> pinentry-gtk-2
-rwxr-xr-x 1 root root         60832 Dec  8 00:29 pinentry-curses
-rwxr-xr-x 1 root root         48256 Dec  8 00:29 pinentry-emacs
-rwxr-xr-x 1 root root         65088 Dec  8 00:29 pinentry-gnome3
-rwxr-xr-x 1 root root         73792 Dec  8 00:29 pinentry-gtk-2
-rwxr-xr-x 1 root root        103280 Dec  8 00:29 pinentry-qt
-rwxr-xr-x 1 root root         52416 Dec  8 00:29 pinentry-tty

me@b ~ % diff <(ssh a 'ls $(dirname $(which pinentry)) | grep pinentry') <(ls $(dirname $(which pinentry)) | grep pinentry)

我的gpg.conf文件是相同的(模注释和空行):

me@b ~ % diff <(ssh a "egrep -v '^#|^$' ~/.gnupg/gpg.conf") <(egrep -v '^#|^$' ~/.gnupg/gpg.conf)  

我的文件夹的内容~/.gnupg似乎没有任何显着差异

me@b ~ % diff <(ssh a ls -R ~/.gnupg) <(ls -R ~/.gnupg)
2c2
< S.gpg-agent
---
> crls.d
8a9
> S.gpg-agent
9a11,13
> 
> /home/me/.gnupg/crls.d:
> DIR.txt

两者都没有gpg-agent.conf文件:

me@b ~ % ls ~/.gnupg/gpg-agent.conf
ls: cannot access '/home/me/.gnupg/gpg-agent.conf': No such file or directory
me@b ~ % ssh a ls ~/.gnupg/gpg-agent.conf
ls: cannot access '/home/me/.gnupg/gpg-agent.conf': No such file or directory

两者都已pinentry-curses安装:

me@b ~ % pacman -Ql pinentry | grep -i pinentry-curses
pinentry /usr/bin/pinentry-curses
me@b ~ % ssh a 'pacman -Ql pinentry | grep -i pinentry-curses'
pinentry /usr/bin/pinentry-curses

我的环境似乎大致相同:

me@b ~ % env | egrep -i 'ssh|gpg|pgp|pinentry'
SSH_AGENT_PID=519
SSH_AUTH_SOCK=/tmp/ssh-yC9qsRh9Uf2c/agent.518
me@b ~ % ssh a "env | egrep -i 'ssh|gpg|pgp|pinentry'"
SSH_CLIENT=192.168.1.10 54816 22
SSH_CONNECTION=192.168.1.10 54816 192.168.1.2 22

并且gpg-agent两台主机上的 s 都使用相同的参数调用:

me@b ~ % cat /proc/$(pgrep gpg-agent)/cmdline
gpg-agent--homedir/home/me/.gnupg--use-standard-socket--daemon%
me@b ~ % ssh a 'cat /proc/$(pgrep gpg-agent)/cmdline'
gpg-agent--homedir/home/me/.gnupg--use-standard-socket--daemon%

答案1

GnuPG 使用可插入且可配置的pinentry实现,通常通过符号链接/usr/bin/pinentry或类似的解决方案。

在 Debian 及其衍生系统上update-alternative,您可以显示正在安装的系统

update-alternatives --display pinentry

并通过更改它

update-alternatives --config pinentry

如果您手动“搞砸了”,请查看pinentry指向的位置:

ln -l `which pinentry`

(不过,您可能必须递归地解析符号链接)。

相关内容