当我在 GUI 中运行时,如果我运行命令pass
来读取密码(例如 )pass -c Email/FooBar
,则会出现输入密码短语的密码提示。如果我输入密码,我的密码将被复制到剪贴板中。
如果我随后运行pass
命令来读取不同的密码,而无需注销并再次登录,则不需要再次输入密码。
但是,如果我在虚拟终端中尝试相同的操作Control-Alt-F1
,则每次都需要输入密码。
如何才能在虚拟终端中的每个登录会话中准确输入一次密码?
答案1
在控制台(您所说的虚拟终端)和 (GUI) 终端中使用之间的体验差异pass
与 无关,而是与.为(如脚本中使用的)pass
所做的密钥管理有关。gpg
pass
gpg-agent
在现代发行版中,这是自动以 X 启动的。您可以通过从终端和其中一个控制台gpg-agent
执行操作来看到这一点。env | fgrep GPG_AGENT
在我的 Linux Mint 17 上,这是由/etc/X11/Xsession.d/90gpg-agent
.
正如gpg-agent
的man
页面告诉您的:
如果您不使用 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
”是否再次要求输入密码和/或在不同的控制台之间要求输入密码