gpg-agent 启动时没有打开会话

gpg-agent 启动时没有打开会话

环境

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 &

相关内容