我在用着经过作为我的密码管理器浏览器通行证插件和密码菜单。目前,我必须在控制台中手动解锁我的 GPG 密钥,然后才能在网站上使用该插件(否则它会失败并出现错误,指出它无法解密密码文件)或 passmenu(失败而没有错误)。
我希望在登录时自动解锁我的 GPG 密钥,以便无缝使用密码。从我的研究中,我收集了以下内容:
- GPG 密钥可以使用以下方式解锁而不会超时
gpg-preset-passphrase
- PAM(具有
pam_exec
)允许我将其集成到登录过程中
我已经创建/usr/local/bin/gpg-pam-exec
#!/usr/bin/env bash
# read pam provided password token
read token
su $PAM_USER -c "/usr/local/bin/gpg-preset-passphrase" <<< "$token"
和/usr/local/bin/gpg-preset-passphrase
#!/usr/bin/env bash
# read pam provided password token
read token
# get the keygrips of my GPG keys
fingerprints=($(gpg -K --fingerprint --with-colons | sed -nr '/fpr/,+1{s/^grp:+(.*):$/\1/p}'))
# preset each fingerprint
for fingerprint in "${fingerprints[@]}"
do
/usr/libexec/gpg-preset-passphrase -v -c "$fingerprint" <<< "$token"
done
并使它们可执行chmod a+x
。然后我附加了
session optional pam_exec.so log=/var/log/pam_exec.log expose_authtok /usr/local/bin/gpg-pam-exec
并/etc/pam.d/slim
确保我已经allow-preset-passphrase
在~/.gnupg/gpg-agent.conf
和use-agent
在~/.gnupg/gpg.conf
。
手动运行/usr/local/bin/gpg-preset-passphrase
可获得所需结果。但是,重新启动并登录后,我看到以下内容/var/log/pam_exec.log
:
*** Thu May 2 10:49:38 2019
gpg-preset-passphrase: caching passphrase failed: Not implemented
gpg-preset-passphrase: caching passphrase failed: Not implemented
我真的不知道接下来该怎么做。我已经确信脚本是以正确的用户身份运行的 ( echo $(id -un)
),这让我相信gpg-agent
忽略配置文件。
我尝试添加
gpgconf --kill gpg-agent
gpg-agent --options /home/$PAM_USER/.gnupg/gpg-agent.conf --daemon
,/usr/local/bin/gpg-preset-passphrase
但这也不起作用。
非常感谢任何指点。
答案1
似乎有一个项目正是这样做的:cruegge/pam-gnupg
这里还有一个简单的脚本:阿普苏/5893348这似乎是作为使者- 看这个问题