我最近打算通过 SSH 转发 GPG Agent 的 socket。在 wiki:GnuPG#Forwarding gpg-agent and ssh-agent to remote 中提到
gpgconf --list-dirs agent-ssh-socket
但我这边显示的是形如
/run/user/1001/gnupg/d.abcabcabcabc/S.gpg-agent
的路径。其中 S.gpg-agent 不在 gnupg 中,而是在其子目录中;但我查看此目录发现这个子目录中并没有 socket 文件。
systemctl --user status gpg-agent.socket
也显示其管辖的文件应是 gnupg/S.gpg-agent。我在 GnuPG 选项列表 里没看到能自定义这个路径的。请问我如何 debug?
最近编辑记录 Franklin Yu (2023-04-06 13:27:58)
离线
gpgconf --list-dirs agent-socket 呢?
离线
不好意思,我打錯了,我之前執行的命令就是 agent-socket 如果打 SSH socket 出來的則是這個:
/run/user/1001/gnupg/d.19dny8pcrzpq1uj8ykkupwfr/S.gpg-agent.ssh
离线
怪哦。你直接 gpgconf -L 看看?
离线
這個 -L 倒是方便了。
sysconfdir:/etc/gnupg
bindir:/usr/bin
libexecdir:/usr/lib/gnupg
libdir:/usr/lib/gnupg
datadir:/usr/share/gnupg
localedir:/usr/share/locale
socketdir:/run/user/1001/gnupg/d.abcabcabcabc
dirmngr-socket:/run/user/1001/gnupg/d.abcabcabcabc/S.dirmngr
agent-ssh-socket:/run/user/1001/gnupg/d.abcabcabcabc/S.gpg-agent.ssh
agent-extra-socket:/run/user/1001/gnupg/d.abcabcabcabc/S.gpg-agent.extra
agent-browser-socket:/run/user/1001/gnupg/d.abcabcabcabc/S.gpg-agent.browser
agent-socket:/run/user/1001/gnupg/d.abcabcabcabc/S.gpg-agent
homedir:/home/franklinyu/.local/share/gnupg
感覺 socketdir 是關鍵?另外有幾個疑點:
我機器上沒有 /etc/gnupg 這個目錄;homedir 裏面也沒有 *.conf(我看文檔說可能會有 gpg.conf 和 gpgconf.conf),只有 private-keys-v1.d、pubring.kbx、trustdb.gpg。
user service “gpg-agent.service” 狀態是 inactive (dead),但我有一個 gpg-agent 的進程,其父進程是 systemd(pid 1),其用戶是我。
更新:這個問答似乎表示 socket 目錄是無法更改的?讓人更疑惑了。
最近编辑记录 Franklin Yu (2023-04-03 12:37:32)
离线
原来如此,是你自己启动的 gpg-agent 啊。
你不要自己启动就好了嘛。systemd 启动的时候,套接字是由 systemd 监听并传给 gpg-agent 的,所以路径不一样。
离线
我剛剛試了一下重啓,這個 gpg-agent 並沒有啓動。但 gpgconf 仍然輸出的是這個奇怪的路徑,所以 gpgconf 的問題應該和「我是否有啓動 gpg-agent」無關
离线
哦,你的 homedir 不是默认的。
离线
確實,但我覺得應該和我碰到的問題無關?
离线
中间多出来的那串就是你的 gpg homedir 的 hash 啦。
离线
多謝指南,我找到Wiki的相關描述了。我去 Stack Overflow 上評論一下。
离线