一次缓存所有gpg子项密码?防止需要输入多个gpg密码?


10

我可以只输入一次gpg密码并解锁所有子密钥(签名,解密,身份验证)吗?

目前,我需要输入3次gpg密码(用于签名,解密和身份验证)。这很不方便。

我试图提出一个shell脚本。

#!/bin/bash
set -x
set -e
set +o history

signing_key=77BB3C48
encryption_key=CE998547

tempfile="$(mktemp)"
echo "test" > testfile

unset passphrase || exit 1
read -sp 'Enter password. ' passphrase ; echo

exec 3<<<"$passphrase"

gpg2 --no-tty --use-agent --batch --yes --passphrase-fd 3 --sign-with "$signing_key" --clearsign "$tempfile"
gpg2 --no-tty --use-agent --verify "$tempfile.asc"

gpg2 --no-tty --use-agent --yes --armor --recipient "$encryption_key" --encrypt "$tempfile"

exec 3<<<"$passphrase"
gpg2 --no-tty --use-agent --batch --decrypt --passphrase-fd 3 "$tempfile.asc"

但不幸的是,这样,密码gnupg-agent不会缓存密码。这个可以解决吗?

系统信息:

  • 当不使用该shell脚本时,gnupg-agent没有任何问题。当我在外壳中手动签名/解密文件时,pinentry要求输入两次密码,然后将其缓存直到重新启动。
  • 使用Debian Wheezy。
  • gpg版本:

dpkg -l | grep gnupg

ii  gnupg                                        1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement
ii  gnupg-agent                                  2.0.22-3                           i386         GNU privacy guard - password agent
ii  gnupg-curl                                   1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement (cURL)
ii  gnupg2                                       2.0.22-3                           i386         GNU privacy guard - a free PGP replacement (new v2.x)

我曾在gnupg-users邮件列表上询问过,但没有回复。

也许这个答案行得通吗?也许gpg-connect-agent是必需的?


我印象深刻:exec 3<<<"$passphrase"甚至对我来说都是新的。。。
Hauke Laging

Answers:


3

gnome-keyring-daemonseahorse,使密钥和密码管理非常容易。

基本上,如果您将gnome-keyring-daemon作为gpg代理运行,它可以自动解锁GPG密钥。它通过维护密码钥匙圈来做到这一点,其中包含网站,GPG密钥,SSH密钥等东西的密码。然后,使用自己的密码保护该密码钥匙圈。因此,您将其解锁,然后gnome钥匙圈将其他所有内容解锁。
另外,gnome-keyring-daemon具有一个“登录”密钥环,如果它的密码与您的用户密码匹配,则在您登录时该密钥环会自动解锁。


组态

如何使它工作?只需安装gnome-keyring-daemon和seahorse。该软件包应为您完成所有系统配置。只要确保您没有启动另一个keyring守护程序或GPG代理即可。无论哪个开始,最后一个“获胜”,然后gnome密钥环从PAM堆栈中开始,因此非常早。

如果您的GPG密钥存储在中~/.gnupg,它将自动提取它们并充当它们的GPG代理。存储在其中的SSH密钥也是如此~/.ssh

首次尝试使用私钥时,您将看到一个如下所示的对话框:(我通过一个简单的命令行触发了它gpg -d myfile.gpg解锁钥匙圈
只需选择“登录后自动解锁此密钥环”

现在我们还没有真正谈论过海马。那是因为这不是绝对必要的。所有这一切仅通过常规的gnome-keyring-daemon完成。但是,使用海马,您可以查看和管理所有钥匙和钥匙圈。并且,如果您使用集中式身份验证(LDAP),则在更改登录密码时也需要使用它,同时还要更改“登录”密钥环上的密码以使其与之匹配。

海马-gpg键


其他密码

如前所述,gnome-keyring-daemon也可以存储网站密码。上次我检查chrome支持此功能,但firefox不支持。但是,有一种技巧可以使其正常工作。
默认情况下,您将有2个密钥环,一个“登录”密钥环和一个“默认”密钥环。“默认”密钥环是默认名称(因此为名称)。但这是一个单独的钥匙圈,因此不会自动解锁。在海马中,如果右键单击“登录”钥匙圈,则可以选择“设置为默认”。选择此项,它将开始被用作密码。我个人只是删除“默认”一个,然后对所有内容使用“登录”。


太糟糕了,我不是gnome用户。我所做的sudo apt-get remove gnupg-agentsudo apt-get install gnome-keyring seahorse。然后创建/etc/X11/Xsession.d/999gnomekeyring具有以下内容的文件。eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) export GNOME_KEYRING_CONTROL GNOME_KEYRING_PID GPG_AGENT_INFO SSH_AUTH_SOCK(否则,gnome-keyring甚至不会在KDE中启动。)现在,当我运行时gpg -d myfile.gpg,将要求我输入密码并将其缓存,但是对话框从未提示我。
adrelanos 2014年

(这很糟糕,因为我回到了开始的地方。签名密钥将被单独缓存。)(在eval和export行之间有一个新行,在此处不能使用注释标记。)
adrelanos 2014年

我也不将gnome用于桌面管理器。不是必需的 Gnome所做的不仅仅是桌面管理器。您不必向添加任何内容/etc/X11/Xsession.d。这应该在PAM堆栈中完成。您应该session optional pam_gnome_keyring.so auto_start在中的一个或多个文件中有一个条目/etc/pam.d。不幸的是我不使用debian,所以我不知道哪个。如果不存在,那就是问题所在。
帕特里克

如果不添加/etc/X11/Xsession.d,则ps aux | grep gnome表明gnome-keyring-daemon无法启动。(尽管如此,将其删除。)/usr/share/doc/libpam-gnome-keyring/README.DebianIf you want to start gnome_keyring from another display manager, you need to add the following lines to the corresponding /etc/pam.d/?dm file: auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start(换行符由se注释删除)。添加到/etc/pam.d/kdm,是否重新启动了kdm。没有代理加载,没有可用。
adrelanos 2014年

我很茫然。如果您正在使用kdm并将其放在中/etc/pam.d/kdm,那应该已经完成​​了。我唯一建议您是否仍然要遵循此路线的方法就是浏览日志。对错误的希望表示抱歉,认为这对您来说是一个简单的解决方案。
帕特里克(Patrick)

0

我做了一些调查,结果令我惊讶,但很简单:

当把这种方式gpg与不沟通gpg-agent 可言gpg能够自己完成所有这些操作。

但是,如果gpg-agent甚至不知道发生了什么,那么它几乎不会知道以前不知道的密码。


好像我发现了一种方法,这是无法解决的。
adrelanos 2014年

我最初的问题仍未解决。(这是Can I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?)我希望将密码传送到gpg-agentgpg-connect-agent以某种方式可行。
adrelanos 2014年
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.