如何让 gpg-agent 对所有 gpg 命令请求使用套接字激活

如何让 gpg-agent 对所有 gpg 命令请求使用套接字激活

我正在使用 arch linux 并使用 gpg (GnuPG) 2.2.27

我使用以下方式配置了 gpg

/home/vipin/.local/share/systemd/user/ 处的系统服务并使用激活套接字以启动 gpg-agent.service

gpg-agent-browser.socket  
gpg-agent.socket
gpg-agent-extra.socket    
gpg-agent-ssh.socket
gpg-agent.service

gpg-代理服务

[Unit]
Description=GnuPG cryptographic agent and passphrase cache
Documentation=man:gpg-agent(1)
Requires=gpg-agent.socket

[Service]
ExecStart=/usr/bin/gpg-agent --supervised --enable-ssh-support
ExecReload=/usr/bin/gpgconf --reload gpg-agent

gpg-agent.socket

[Unit]
Description=GnuPG cryptographic agent and passphrase cache
Documentation=man:gpg-agent(1)

[Socket]
ListenStream=%t/gnupg/S.gpg-agent
FileDescriptorName=std
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target

gpg-代理-ssh.socket

[Unit]
Description=GnuPG cryptographic agent (ssh-agent emulation)
Documentation=man:gpg-agent(1) man:ssh-add(1) man:ssh-agent(1) man:ssh(1)

[Socket]
ListenStream=%t/gnupg/S.gpg-agent.ssh
FileDescriptorName=ssh
Service=gpg-agent.service
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target

gpg-代理-额外套接字

[Unit]
Description=GnuPG cryptographic agent and passphrase cache (restricted)
Documentation=man:gpg-agent(1)

[Socket]
ListenStream=%t/gnupg/S.gpg-agent.extra
FileDescriptorName=extra
Service=gpg-agent.service
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target

gpg-代理-浏览器.socket

[Unit]
Description=GnuPG cryptographic agent and passphrase cache (access for web browsers)
Documentation=man:gpg-agent(1)

[Socket]
ListenStream=%t/gnupg/S.gpg-agent.browser
FileDescriptorName=browser
Service=gpg-agent.service
SocketMode=0600
DirectoryMode=0700

[Install]
WantedBy=sockets.target

当我执行 git push 时,所有事情都运行正常。我能够获得 gpg 提示符并能够输入密码。gpg-agent 因套接字激活而启动

vipin      31480   17517  1 01:09 ?        00:00:00 /usr/bin/gpg-agent --supervised --enable-ssh-support

但是当我尝试使用下面的命令使用 gpg 加密文件时

gpg --decrypt -q --pinentry-mode=loopback ${XDG_DATA_HOME}/pass/other/systembackup.gpg

数据正在解密,但是当我尝试执行 ps -eaf |grep gpg 时。我可以看到两个代理正在运行,一个在守护进程中,另一个在监督中。如何使此命令使用套接字激活?

vipin      32064   17517  0 01:11 ?        00:00:00 /usr/bin/gpg-agent --supervised --enable-ssh-support
vipin      32167       1  1 01:11 ?        00:00:00 gpg-agent --homedir /home/vipin/.local/share/gnupg --use-standard-socket --daemon

答案1

启动第二个实例是因为它服务于不同的 GNUPGHOME--homedir,从其启动选项就可以看出。

(默认位置是~/.gnupg,而您的启动位置是~/.local/share/gnupg。)

不同的 gpg 目录将总是有单独的 gpg-agent 实例,否则将失去拥有单独目录的意义。(这是因为 gpg-agent 不再仅仅是一个密码缓存服务——从 v2.1.x 开始,它是处理全部访问子目录中的 gpg 私钥private-keys-v1.d。)

为了避免这种情况,您需要为可能使用的每个不同的 GNUPGHOME 复制 gpg-agent.service(以及至少它的一些 .socket 单元),或者停止使用自定义的 GNUPGHOME。

(请注意,即使 GNUPGHOME 是定制的,最近的 GnuPG 版本也总是将套接字保存在 /run 中的随机路径中,而不再直接保存在“主”目录中;但是,该路径是确定性的,作为主目录位置的哈希值,可以使用 进行检索gpgconf --list-dirs。)

相关内容