嘗試訪問私鑰時 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 /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
(閱讀:thegpg-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:重新安裝
gpg
,gpg-agent
並dirmngr
沒有解決問題。此外,刪除文件~/.gnupg/gpg.conf
,~/.gnupg/gpg-agent.conf
並~/.gnupg/dirmngr.conf
沒有解決它。edit2:與此同時,我從
PureOS Amber
to升級Debian Stable (Bullseye)
並重新安裝了新版本的gpg
,gpg-agent
和(dirmngr
並libgcrypt20
更改了上面的文字以反映新版本),但問題仍然存在。$$ 1 $$從技術上講
gpg -k
也掛了,但我認為這是因為我with-secret
在gpg.conf
-file 中啟用了該選項。在註釋掉這個問題後,這個問題就消失了。
我終於找到了一個解決方案,雖然我不確定我是否理解它。
gpg-agent
不知何故, started by的版本systemd
是問題所在。執行systemctl --user mask gpg-agent
然後gpg-agent
手動重新啟動時,問題消失了。我會試著理解為什麼會這樣,然後在這裡寫一個更新。
通常如果你
reinstall gnupg
,問題就會得到解決。除非問題的原因是別的。