我的 gpg.conf 文件中有一行内容是use-agent
.
我知道这是指 gpg-agent,它是一个守护进程。手册页指出“gpg-agent 是一个守护进程,用于独立于任何协议管理秘密(私有)密钥。它用作 gpg 和 gpgsm 以及其他几个实用程序的后端。”
谁能解释一下这在 gpg 的上下文中意味着什么? gpg-agent 有什么意义?
我目前有GPG 1.4。
- 如何判断代理是否正在运行?实际上我什至不清楚 gpg-agent 是否与基本 GPG 1.4 软件包一起安装。
- 如果它没有运行,我该如何启动它?
- 如果它正在运行,我该如何停止它?
答案1
Gpg-agent 是一个在后台运行的程序(a守护进程)并将 GPG 密钥存储在内存中。当 GPG 进程需要密钥时,它会通过以下方式联系正在运行的 gpg-agent 程序:插座并请求钥匙。如果代理进程有密钥,它会将其提供给 gpg。如果没有,它会尝试从您的密钥环加载加密密钥,并提示您输入密钥的密码。代理获得解密密钥后,会将其传递给 gpg 进程。除了 GPG 密钥之外,Gpg-agent 还可以类似地存储 SSH 密钥并将其提供给 SSH 进程,就像ssh-agent
SSH 自带的程序一样。
使用密钥代理的要点是,您不必每次使用密钥时都输入密码。代理将密钥从一次到下一次保存在内存中。 GPG 本身无法做到这一点,因为一旦完成其工作,进程就会终止。
密钥代理可以做的另一件事是允许在远程计算机上运行的 GPG 获取本地代理中的密钥(这可能会从本地文件加载它们并提示您输入密码)。 Gpg-agent 还不能做到这一点,它是一个计划的功能。 SSH 已经有代理转发很长时间了。 (这是不使用 gpg-agent 作为 SSH 密钥的原因。)
GPG 1.x 或 2.0.x 知道代理正在运行,因为GPG_AGENT_INFO
设置了变量。该变量包含与代理通信的套接字的位置以及代理的进程 ID。 GPG 2.1 始终将代理套接字放置在~/.gnupg
.如果代理进程未运行,GPG 2.x 始终会启动该进程。
您只需运行即可启动代理gpg-agent
。如果您想保留代理进程作为会话的一部分,您可以将会话管理器的调用替换为gpg-agent my-session-manager
;某些发行版会自动设置此功能。 GPG 会自动启动代理,并且 GPG 2.1 会额外查找正在运行的代理,无需环境变量,因此不需要这样启动,除非您使用旧版本的 GPG 或使用代理存储其他类型密钥,例如 SSH。
您可以派代理命令与gpg-connect-agent
shell 命令。发送kill
命令终止代理进程(或向其发送信号)。
Gpg-agent 随 GPG 本身一起提供。有些发行版将其单独打包。