环境
Ubuntu服务器18.04
gpg2 v2.2.4
通过v1.7.1
问题
有没有办法启动 gpg-agent——监督启动时?当我尝试开始时gpg-agent --supervised
,我得到:
gpg-agent (GnuPG) 2.2.4 starting in supervised mode.
no LISTEN_PID environment variable found in --supervised mode (ignoring)
no LISTEN_FDS or LISTEN_FDNAMES environment variables found in --supervised mode (assuming 1 active descriptor)
Fatal: file descriptor 3 must be valid in --supervised mode if LISTEN_FDNAMES is not set
细节
我正在尝试在我的 ubuntu 服务器上安装 protonmail-bridge 和 postfix。 Protonmail-bridge 需要 gnome-keyring 或 pass 才能启动。我不知道为什么,但 gnome-keyring 不能在服务器上工作(在我的带有 linux mint 的笔记本电脑上工作正常)。我可以用pass开始桥。为此pass init
,我需要 gpg2 密钥。
当我手动执行时一切正常,我可以发送邮件。让我们编写脚本使其在重新启动时自动运行(通过 cron 中的 @reboot)。我需要使用 gpg-agent 缓存 gpg2 密钥的密码。
#!/bin/bash
KEYID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PIDOF=`pidof gpg-agent`
RETVAL=$?
# Start gpg-agent if it's not running
if [ "$RETVAL" -eq 1 ]; then
eval $(gpg-agent --daemon)
fi
# Cache passphrase
echo "my_passphrase" | /usr/lib/gnupg2/gpg-preset-passphrase -v -c $KEYID
# Start bridge
protonmail-bridge --noninteractive &
只要我不登录,这个脚本就不起作用。我编辑了这样的脚本来发现它:
#!/bin/bash
KEYID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PIDOF=`pidof gpg-agent`
RETVAL=$?
# Start gpg-agent if it's not running
if [ "$RETVAL" -eq 1 ]; then
eval $(gpg-agent --daemon)
fi
# Show running gpg-agents
ps aux | grep gpg-agent > protonmail.log
echo " " >> protonmail.log
COUNT=`pidof gpg-agent | wc -w`
# While gpg-agent --daemon is the only one
while [ "$COUNT" -lt 2 ]; do
sleep 10
# Trying strat gpg-agent --supervised and caching passphrase
echo "my_passphrase" | /usr/lib/gnupg2/gpg-preset-passphrase -v -c $KEYID
COUNT=`pidof gpg-agent | wc -w`
# Show running gpg-agents
ps aux | grep gpg-agent >> protonmail.log
echo " " >> protonmail.log
done
# Cache passphrase
echo "my_passphrase" | /usr/lib/gnupg2/gpg-preset-passphrase -v -c $KEYID
# Start bridge
protonmail-bridge --noninteractive &
通过这些日志,我可以看到它gpg-agent --homedir /home/myaccount/.gnupg --use-standard-socket --daemon
从脚本的开头运行,并/usr/bin/gpg-agent --supervised
在我登录后立即启动。当监督模式运行时,密码缓存和桥接正在工作。但是,我无法在每次重新启动时登录服务器......
我尝试导出很多环境变量,但没有成功。
编辑:
解决方法
修改/usr/lib/systemd/user/gpg-agent.service后,gpg-agent --supervised失败(是的,我不知道如何编辑服务......)。 gpg 继续工作ps aux
,但不是监督模式:
gpg-agent --homedir /home/my_account/.gnupg --use-standard-socket --daemon
我认为重要的参数是--使用标准套接字(我确定我之前测试过......)。
不管怎样,编辑我的第一个脚本如下(并添加一些导出),密码短语按照我想要的方式缓存:
#!/bin/bash
GPG_TTY=$(tty)
export GPG_TTY
KEYID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PIDOF=`pidof gpg-agent`
RETVAL=$?
# Start gpg-agent if it's not running
if [ "$RETVAL" -eq 1 ]; then
if [ -f "${HOME}/.gpg-agent-info" ]; then
. "${HOME}/.gpg-agent-info"
export GPG_AGENT_INFO
fi
eval $(gpg-agent --homedir /home/my_account/.gnupg --use-standard-socket --daemon)
fi
# Cache passphrase
echo "my_passphrase" | /usr/lib/gnupg2/gpg-preset-passphrase -v -c $KEYID
# Start bridge
protonmail-bridge --noninteractive &