当我在虚拟终端中时,如何缓存 unix pass 的 PGP 解锁?

当我在虚拟终端中时,如何缓存 unix pass 的 PGP 解锁?

当我在 GUI 中运行时,如果我运行命令pass来读取密码(例如 )pass -c Email/FooBar,则会出现输入密码短语的密码提示。如果我输入密码,我的密码将被复制到剪贴板中。

如果我随后运行pass命令来读取不同的密码,而无需注销并再次登录,则不需要再次输入密码。

但是,如果我在虚拟终端中尝试相同的操作Control-Alt-F1,则每次都需要输入密码。

如何才能在虚拟终端中的每个登录会话中准确输入一次密码?

答案1

在控制台(您所说的虚拟终端)和 (GUI) 终端中使用之间的体验差异pass与 无关,而是与.为(如脚本中使用的)pass所做的密钥管理有关。gpgpassgpg-agent

在现代发行版中,这是自动以 X 启动的。您可以通过从终端和其中一个控制台gpg-agent执行操作来看到这一点。env | fgrep GPG_AGENT在我的 Linux Mint 17 上,这是由/etc/X11/Xsession.d/90gpg-agent.

正如gpg-agentman页面告诉您的:

如果您不使用 X 服务器,您也可以将其放入常规启动文件 ~/.profile 或 .bash_profile 中。最好不要运行 gpg-agent 的多个实例,因此您应该确保只有一个正在运行:gpg-agent 使用环境变量来通知客户端有关通信参数的信息。您可以将此环境变量的内容写入文件,以便可以测试正在运行的代理。以下是使用 Bourne shell 语法的示例:

     gpg-agent --daemon --enable-ssh-support \
               --write-env-file "${HOME}/.gpg-agent-info"

上面提到90gpg-agent的实际上是智能的,测试是否gpg-agent已经在运行,但它默认使用 using ~/.gnupg/gpg-agent-info-$(hostname)

如果您的发行版有类似的设置,那么您应该能够将上述行添加到您的~/.profile(但一定要使用与您的 X 启动匹配的 PIDFILE gpg-agent)。您还应该能够通过重新评估文件来从多个控制台使用相同的 gpg-agent .gpg-agent-info

在尝试进行设置时,请确保运行pstree | grep -F pgp-agent以确保运行的代理数量不会超过您需要的数量,否则取决于环境“ pass”是否再次要求输入密码和/或在不同的控制台之间要求输入密码

相关内容