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