如何与ssh-agent + ssh-add一起使用gpg-agent?


15

ssh-agent非常易于使用,我可以启动它并使用添加键ssh-add keyfile。终止进程后ssh-agent,所有文件都消失了。

如何获得相同的行为gpg-agent?我找到的最接近的程序是gpg-preset-passphrase。但是,通过查看的手册页gpg-agent,似乎已创建了一个用于存储私钥的目录。

我可能是错的,所以我想知道如何gpg-agent以不创建文件/目录的方式进行设置?如果不可能的话,也欢迎其他建议使gpg-agent类似ssh-agent+的工作ssh-add。我不是在寻找像Seahorse这样的GUI解决方案。


你检查了gpg-connect-agent吗?
Smithamax,2012年

@Smithamax没有,但似乎使用了与相同的功能gpg-preset-passphrase。我跑了起来gpg-connect-agent,得到了一个炮弹,然后执行setkey IDOFMYPRIVATEKEYHERE并随后执行preset_passphraseid导致“ ERR 67108924 Unsupported <GPG-agent>-no --allow-preset-passphrase”
Lekensteyn 2012年

Answers:


13

我决定再次查看一下,并了解其工作原理。GPG使用术语“缓存”来存储密码。最长存储时间可能受到两个限制:

  • 自从最初添加密钥以来,保持密码短语的时间。
  • 自上次访问以来保留密码短语的时间。

此外,两个约束都存在两种变体,一种是GPG密钥,另一种是SSH密钥(如果启用了支持)。

来自gpg-agent(1)以下内容的相关手册页条目:

   --default-cache-ttl n
          Set  the  time a cache entry is valid to n seconds.  The default
          is 600 seconds.

   --default-cache-ttl-ssh n
          Set the time a cache entry used for SSH keys is valid to n  sec‐
          onds.  The default is 1800 seconds.

   --max-cache-ttl n
          Set the maximum time a cache entry is valid to n seconds.  After
          this time a cache entry will be expired  even  if  it  has  been
          accessed recently.  The default is 2 hours (7200 seconds).

   --max-cache-ttl-ssh n
          Set the maximum time a cache entry used for SSH keys is valid to
          n seconds.  After this time a cache entry will be  expired  even
          if  it has been accessed recently.  The default is 2 hours (7200
          seconds).

密码总是缓存的(在内存中,不在磁盘上!已通过git repo验证$HOME),因此不需要ssh-add。例如,对伪数据进行签名已经触发了缓存:

$ echo | gpg -s >/dev/null
(passphrase requested
$ echo | gpg -s >/dev/null
(signing proceeds without asking for passphrase)

要永久更改gpg-agent的缓存设置,请编辑〜/ .gnupg / gpg-agent.conf`并添加以下内容:

default-cache-ttl  60     # Expire GPG keys when unused for 1 minute
max-cache-ttl     600     # Expire GPG keys after 10 minutes since addition

我试图通过指定启用SSH代理支持enable-ssh-support,但这使gpg-agent要求您提供另一个密钥来加密该密钥,然后将您的私钥存储在中~/.gnupg/private-keys.d/。不适合我,我将坚持使用双重ssh-agent / gpg-agent方法。

一些奖励提示:

  • max-cache-ttl-ssh可以在添加密钥时指定SSH代理的等效项,例如:ssh-add -t 600 ~/.ssh/id_rsa
  • 为防止将GPG密码存储在代理中,请禁用该代理。在较新的GPG版本中,该选项将--no-use-agent被忽略,但是您可以通过清除相关的环境变量来防止使用代理。这样做的一些方法:

    echo | GPG_AGENT_INFO= gpg -s         # temporary
    export GPG_AGENT_INFO=; echo | gpg -s # until the current shell is closed
    

我的机器不断要求密码短语
明亮的

@donbright您确定只有一个gpg-agent活动吗?(例如,检查过程列表ps u -C gpg-agent)。缓存超时设置正确吗?如果将其用于签名(与(SSH)身份验证相对),该ignore-cache-for-signing选项是否未设置?
Lekensteyn'2

谢谢。我的问题原来是我在Ubuntu上使用的是gpg 1.4而不是gpg 2,这可能会使您应该安装的软件包感到困惑。
唐明亮
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.