如何将gpg配置为每个会话仅输入一次密码


18

gpg仅输入一次密码的方式进行配置是否可行,并且在整个会话中都可以使用(我正在使用Ubuntu/XFce)?

我不确定如何gpg工作,似乎默认功能是gpg要求gpg-agent输入密码,并且代理运行密码输入要求输入密码。

我想每个会话仅使用一次pinentry-curses,所以我可以粘贴密码短语(我有hex一个句子中的字符串-我使用echo -n <SENTENCE> | str-hex),并在不放入密码的情况下从Claws Mail签名电子邮件(您不能在Claws中使用pinentry-curses邮件)。

Answers:


16

您可以使用此页面上描述的技术:

http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent

这是要点:

  1. 安装gpg-agent和pinentry程序:

    sudo apt-get install gnupg-agent pinentry-curses
    
  2. 将以下各行添加到中~/.profile。任何确认POSIX的外壳程序都应包含此文件。

    # Invoke GnuPG-Agent the first time we login.
    # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?
    if test -f $HOME/.gpg-agent-info && \
        kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
        GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
    else
        # No, gpg-agent not available; start gpg-agent
        eval `gpg-agent --daemon --no-grab --write-env-file $HOME/.gpg-agent-info`
    fi
    export GPG_TTY=`tty`
    export GPG_AGENT_INFO
    

    登录时将激活此小脚本。如果代理未运行,则将启动它。启动代理后,它将显示如何设置环境变量以进行连接。该脚本将这些值保存在中~/.gpg-agent-info,以便在启动另一个登录会话时,脚本可以正确设置变量,从而使用代理。

每次启动时,您只需输入一次密码。代理会将您的密钥存储在内存中,因此您无需再次输入密码。


我一直在愉快地使用此脚本,但是它会随机失败。最终,我修改了此条件,GPG_PROCESS=`cut -d: -f 2 $HOME/.gpg-agent-info` if test -f $HOME/.gpg-agent-info && \ kill -0 ${GPG_PROCESS} 2>/dev/null && \ [[ ${GPG_PROCESS} == `pgrep -x -u "${USER}" gpg-agent` ]] ; then并且效果很好。问题是上面的脚本检查其中的进程.gpg-agent-info是否仍在运行,并使用接受信号kill -0。如果存在一个过程,但不是gpg-agent,我们将得到错误的行为。随附的代码检查我们是否有正确的流程。
wyer33 '16
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.