gpg-agent는 열린 세션 없이 시작됩니다.

gpg-agent는 열린 세션 없이 시작됩니다.

환경

우분투 서버 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

세부 사항

내 우분투 서버에 protonmail-bridge와 postfix를 설치하려고 합니다. Protonmail-bridge를 시작하려면 gnome-keyring 또는 패스가 필요합니다. 이유는 모르겠지만 gnome-keyring이 서버에서 작동하지 않습니다(Linux Mint가 설치된 랩톱에서는 제대로 작동합니다). 패스로 브리지를 시작할 수 있습니다. 이를 위해서는 pass initgpg2 키가 필요합니다.

수동으로 하면 모든 것이 잘 작동하고 메일을 보낼 수 있습니다. 재부팅 시 (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 &

관련 정보