为什么 gpg-agent 创建多个套接字

400*_*Cat 5 gpg gpg-agent

使用gpgwith 时gpg-agent,会在我的~/.gnupg目录中创建以下套接字:

S.gpg-agent
S.gpg-agent.browser
S.gpg-agent.extra
S.gpg-agent.ssh
Run Code Online (Sandbox Code Playgroud)

我假设,S.gpg-agent是标准的gpg-agent插座。但是其他的有什么用呢?

我没有将 gpg 与 ssh 一起使用,也没有将 gpg 与浏览器一起使用。

它在哪里配置,这些是自动创建的?

我可以禁用它们吗?

我只需要标准 S.gpg-agent

gnupg 2.2.12在 Debian Buster 上使用。

Pat*_*zek 7

gpg-agent可以有多重性格,并提供不同的服务。

例如,您可以停止ssh-agent在您的机器上运行,并gpg-agent用作替代品......只要您使用正确的套接字,S.gpg-agent.ssh因为它必须实现正确的协议ssh,期待讨论。为什么会那么有用?例如,直到最近,ssh还不能使用存储在 FIDO2/U2F 中的密钥(如 Yubikeys),这只是在不久前发布的 8.2 中添加的,这使得事情变得非常简单,如https://blog.snapdragon 所述.cc/2020/02/23/direct-fido2-u2f-support-in-openssh-8-2-on-macos/

在此之前,gpg-agent会被使用,因为gpg它支持像智能卡一样处理的 U2F 事物。这是关于如何做到这一点的规范文档之一:https : //florin.myip.org/blog/easy-multifactor-authentication-ssh-using-yubikey-neo-tokens

现在回到gpg-agent,其完整手册位于https://www.gnupg.org/documentation/manuals/gnupg/Invoking-GPG_002dAGENT.html#Invoking-GPG_002dAGENT

您可以在https://www.gnupg.org/documentation/manuals/gnupg/Agent-Options.html#Agent-Options 中找到所有选项,这些选项通常可以放在配置文件中~/.gnupg/gpg-agent.conf

我们可以学习例如:

  1. 关于这.extra一点,我们可以了解如何禁用它以及它的用途:
--extra-socket name
Run Code Online (Sandbox Code Playgroud)

默认情况下会创建额外的套接字,您可以使用此选项更改套接字的名称。要禁用套接字的创建,请使用“none”或“/dev/null”作为名称。

还要侦听给定套接字上的本地 gpg-agent 连接。这个额外套接字的预期用途是设置一个 Unix 域套接字从远程机器转发到本地机器上的这个套接字。然后,在远程机器上运行的 gpg 可以连接到本地 gpg-agent 并使用其私钥。这允许在远程机器上解密或签署数据,而无需将私钥暴露给远程机器。

  1. 对于 ssh 支持,.ssh一个:

--enable-ssh-support

--enable-putty-support

OpenSSH 代理协议始终处于启用状态,但 gpg-agent 只会在给出此标志时设置 SSH_AUTH_SOCK 变量。

在这种操作方式下,agent不仅实现了gpg-agent协议,还实现了OpenSSH使用的agent协议(通过单独的socket)。因此,应该可以使用 gpg-agent 作为众所周知的 ssh-agent 的直接替代品。

  1. 对于浏览器套接字和更多信息,您可以使用https://wiki.archlinux.org/index.php/GnuPG#gpg-agent说:

gpg-agent主要用作守护进程来请求和缓存钥匙串的密码。如果从外部程序(如邮件客户端)使用 GnuPG,这将非常有用。gnupg 带有默认启用的 systemd 用户套接字。这些插座gpg-agent.socketgpg-agent-extra.socketgpg-agent-browser.socketgpg-agent-ssh.socketdirmngr.socket

gpg-agent.socketgpg 使用main连接到gpg-agent守护进程。

gpg-agent-extra.socket在本地系统上的预期用途是设置从远程系统转发的 Unix 域套接字。这使得可以在远程系统上使用 gpg,而无需将私钥暴露给远程系统。有关详细信息,请参阅 gpg-agent(1)。

gpg-agent-browser.socket允许网页浏览器来访问GPG代理守护进程。

所述gpg-agent-ssh.socket可以通过SSH被用于由SSH-加载程序添加缓存SSH密钥。有关必要的配置,请参阅 #SSH 代理。

dirmngr.socket启动GnuPG的守护进程进行处理,以密钥服务器的连接。

因此,即使您不使用它们,拥有它们也没有坏处。如果您真的想确保它们不存在,您可以尝试将以下内容放入 gpg-agent 配置文件中:

extra-socket /dev/null
browser-socket /dev/null
Run Code Online (Sandbox Code Playgroud)

我没有测试过,文档没有提到,browser-socket但这个较旧的问题有:https : //askubuntu.com/questions/777900/how-to-configure-gnupgs-s-gpg-agent-socket-location

  • @400theCat 我不这么认为。查看[代码](https://git.gnupg.org/cgi-bin/gitweb.cgi?p=gnupg.git;a=blob;f=agent/gpg-agent.c;h=ffd85d196c19719e5c05a50d77f4d430036dbc17;h =7d8f4ee7cf56eda988acdc909160cbac71bff18a),SSH 套接字似乎是无条件创建的(与“浏览器”和“额外”套接字相反)。 (3认同)