Debian

嘗試訪問私鑰時 gpg-agent 掛起

  • September 18, 2021

我在系統上使用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 /bye導致掛起。同樣,我的 systemd-unit-file 也不是不正常的:gpgconf --kill gpg-agent``systemctl --user start gpg-agent

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

我知道其他人已經描述了這個問題(參見例如here,但提到的解決方案(pkill -9 gpg-agent)不適用於我,因為即使沒有其他包含字元串的程序gpg(閱讀:the 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 Amberto升級Debian Stable (Bullseye)並重新安裝了新版本的gpg,gpg-agent和(dirmngrlibgcrypt20更改了上面的文字以反映新版本),但問題仍然存在。


$$ 1 $$從技術上講gpg -k也掛了,但我認為這是因為我with-secretgpg.conf-file 中啟用了該選項。在註釋掉這個問題後,這個問題就消失了。

我終於找到了一個解決方案,雖然我不確定我是否理解它。

gpg-agent不知何故, started by的版本systemd是問題所在。執行systemctl --user mask gpg-agent然後gpg-agent​​手動重新啟動時,問題消失了。我會試著理解為什麼會這樣,然後在這裡寫一個更新。

通常如果你reinstall gnupg,問題就會得到解決。除非問題的原因是別的。

引用自:https://unix.stackexchange.com/questions/668976