Answers:
您可以使用此页面上描述的技术:
http://fvue.nl/wiki/Debian_4.0:_Installing_gpg-agent
这是要点:
安装gpg-agent和pinentry程序:
sudo apt-get install gnupg-agent pinentry-curses
将以下各行添加到中~/.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
,我们将得到错误的行为。随附的代码检查我们是否有正确的流程。