Answers:
Gpg-agent是在后台运行的程序(daemon),并将GPG密钥存储在内存中。当GPG进程需要密钥时,它将通过套接字联系正在运行的gpg-agent程序并请求密钥。如果代理进程具有密钥,则将其提供给gpg。如果不是,它将尝试从您的密钥环加载加密的密钥,并提示您输入密钥的密码。代理获得解密后的密钥后,便将其传递给gpg进程。除了GPG密钥外,Gpg-agent可以类似地存储SSH密钥并将其提供给SSH进程,例如ssh-agent
SSH附带的程序。
使用密钥代理的主要目的是使您不必在每次使用密钥时都键入密码。代理一次将密钥保存到内存中。GPG本身无法执行此操作,因为该流程一旦完成工作便会终止。
密钥代理可以做的另一件事是允许运行在远程计算机上的GPG在本地代理中获取密钥(这可以从本地文件加载密钥并提示您输入密码)。Gpg-agent尚无法执行此操作,这是一项计划功能。SSH代理转发已经很长时间了。(这是不对SSH密钥使用gpg-agent的原因。)
GPG 1.x或2.0.x知道代理正在运行,因为GPG_AGENT_INFO
已设置了变量。此变量包含用于与代理通信的套接字的位置以及代理的进程ID。GPG 2.1始终将agent套接字放置在中~/.gnupg
。如果没有运行GPG 2.x,它总是会启动一个代理进程。
您只需运行即可启动代理gpg-agent
。如果要将代理进程保留为会话的一部分,则可以将gpg-agent my-session-manager
;替换为会话管理器的调用。有些发行版本会自动设置。GPG会自动启动代理,GPG 2.1还会在不需要环境变量的情况下找到正在运行的代理,因此除非您使用旧版GPG或使用代理存储其他类型,否则您无需以此方式启动代理密钥,例如SSH。
您可以使用shell命令发送代理命令gpg-connect-agent
。发送kill
命令以杀死代理进程(或发送信号)。
Gpg代理随附GPG本身。一些发行版将其单独打包。