尝试访问私钥时 gpg-agent 挂起

尝试访问私钥时 gpg-agent 挂起

我在我的系统上使用gpg(实际上是gpg-agent)时遇到问题。Debian Bullseye (Stable)更准确地说,我使用以下内容:

gpg --version | head -n2
gpg (GnuPG) 2.2.27
libgcrypt 1.8.8

uname -v
#1 SMP Debian 5.10.46-4 (2021-08-03)

lsb_release -a 2> /dev/null
Distributor ID: Debian
Description:    Debian GNU/Linux 11 (bullseye)
Release:    11
Codename:   bullseye

我已经大约 3 个月没有重新启动机器了。在那段时间我能够gpg毫无困难地使用(加密、解密、签名、验证、密钥管理)。我在过去几个月中进行了多次更新,没有一个对我造成任何问题(此外我正在使用needrestart)。在过去的 3 个月里,我没有更改相关配置文件中的任何内容(据我所知,是~/.gnupg/gpg.conf~/.gnupg/gpg-agent.conf、 )。~/.gnupg/dirmngr.conf

今天我重新启动了我的机器,突然间我无法使用我的机器gpg-agent来做任何涉及密钥的事情。同时gpg -k [1]gpg --search-keys DEADBEEF导致结果,gpg -K以及gpg -d /PATH/TO/ENCRYPTED/FILE无限期挂起。同样,gpg-connect-agent reloadagent /byeandgpgconf --kill gpg-agent以及也会systemctl --user start gpg-agent导致绞刑。同样,我的 systemd-unit-file 也不是普通的:

systemctl --user cat gpg-agent | grep -Ev '^#|^$'
[Unit]
Description     = gpg-agent (password store for gpg-keys)
[Service]
Type            = forking
ExecStart       = /usr/bin/gpg-agent --daemon
ExecStop        = /usr/bin/gpg-connect-agent /bye
Restart         = on-abort
[Install]
WantedBy        = default.target

我知道这个问题已经被其他人描述过(参见例如这里但提到的解决方案 ( pkill -9 gpg-agent) 不适用于我,因为即使没有其他包含该字符串的进程gpg(读取:gpg-agent)正在运行,这种情况也会发生。

ps -ef | grep gpg && echo " " && gpg --verbose --debug-level guru -K
MYUSERNAME     59248 59247  0 17:17 pts/1    00:00:00 grep --color=auto gpg
 
gpg: enabled debug flags: packet mpi crypto filter iobuf memory cache memstat trust hashing ipc clock lookup extprog
gpg: DBG: [not enabled in the source] start
gpg: DBG: [not enabled in the source] keydb_new
gpg: DBG: [not enabled in the source] keydb_search_reset
gpg: DBG: keydb_search: reset  (hd=0x000055c04a474cd0)
gpg: DBG: [not enabled in the source] keydb_search enter
gpg: DBG: keydb_search: 1 search descriptions:
gpg: DBG: keydb_search   0: FIRST
gpg: DBG: keydb_search: searching keybox (resource 0 of 1)
gpg: DBG: keydb_search: searched keybox (resource 0 of 1) => Success
gpg: DBG: [not enabled in the source] keydb_search leave (found)
gpg: DBG: [not enabled in the source] keydb_get_keybock enter
gpg: DBG: parse_packet(iob=1): type=6 length=51 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=12 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=13 length=19 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=12 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=2 length=150 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=6 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=2 length=150 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=6 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=14 length=56 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=2 length=126 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=6 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=14 length=51 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=2 length=245 (parse.../../g10/keydb.c.1242)
gpg: DBG: parse_packet(iob=1): type=12 length=6 (parse.../../g10/keydb.c.1242)
gpg: DBG: iobuf-1.0: underflow: buffer size: 924; still buffered: 0 => space for 924 bytes
gpg: DBG: iobuf-1.0: close '?'

<<< HERE HANGING INDEFINITELY >>>

^C
gpg: signal Interrupt caught ... exiting

我的变量 GPG_AGENT_INFO 和 GPG_TTY 也已设置。

echo -e "$GPG_AGENT_INFO\n$GPG_TTY"
/run/user/1000/gnupg/S.gpg-agent:0:1
/dev/pts/1

顺便说一句,重新启动。没有改变任何东西。有任何想法吗?


edit1:重新安装gpggpg-agentdirmngr不能解决问题。另外,删除文件~/.gnupg/gpg.conf并不能解决问题~/.gnupg/gpg-agent.conf~/.gnupg/dirmngr.conf


edit2:与此同时,我从 升级PureOS AmberDebian Stable (Bullseye)并重新安装了新版本的gpggpg-agentdirmngrlibgcrypt20(并更改了上面的文本以反映新版本),但问题仍然存在。


[1] 从技术上讲gpg -k也挂起了,但我认为这是因为我with-secret在我的gpg.conf-file 中启用了该选项。评论完后这个问题就消失了。

答案1

我终于找到了解决方案,尽管我不确定我是否理解它。

gpg-agent不知何故,启动的版本systemd是问题所在。当执行systemctl --user mask gpg-agent然后gpg-agent手动重新启动时,问题消失了。我将尝试理解为什么会出现这种情况,然后在此处编写更新。

答案2

通常如果你这样做reinstall gnupg,问题就会解决。除非问题的原因是别的。

相关内容