특정 gpg 명령을 실행한 후 에이전트가 자동으로 시작될 때 사용자 정의 구성으로 gpg 에이전트를 실행하려면 어떻게 해야 합니까?

특정 gpg 명령을 실행한 후 에이전트가 자동으로 시작될 때 사용자 정의 구성으로 gpg 에이전트를 실행하려면 어떻게 해야 합니까?

문서에 따르면 다음과 같은 사용자 정의 구성으로 gpg-agent를 실행할 수 있습니다. 이것이 공식적인 방법이라고 생각합니다.

다음 gpg-agent.conf에는 다음 내용이 포함되어 있습니다.

allow-preset-passphrase
default-cache-ttl 34560000
max-cache-ttl 34560000

그리고 사용자 정의 구성으로 gpg-agent를 실행하십시오.

#!/bin/bash
GPG_CONFIG_FILE="/opt/gpg-agent.conf"
gpg-agent --options $GPG_CONFIG_FILE --daemon

내 관찰에 따르면 gpg-agent는 아무런 문제 없이 사용자 정의 구성을 완벽하게 읽습니다.

그러나 gpg-agent를 사용하면 is not runninggpg 명령을 실행할 때 사용된다는 것을 알았습니다 automatically run gpg-agent. 다음은 gpg-agent를 호출하고 자동으로 시작하는 명령의 예입니다.

1) echo RELOADAGENT | gpg-connect-agent # Reload and forget passphrase of gpg-agent
2) KEY_GRIP=$(gpg --with-keygrip --list-secret-keys $KEY_ID | grep -Pom1 '^ *Keygrip += +\K.*') # List key grip for that key_id

문제는 위 명령이 사용자 정의 구성으로 gpg-agent를 실행하지 않는다는 것입니다. 스크립트 자체 경로가 존재하지 않는 경우 사전 정의된 값을 사용하여 구성이 자동으로 생성되는 bash 스크립트를 작성 중입니다. 따라서 스크립트는 ~/.gnupg가 아닌 이 사용자 정의 구성만 사용합니다.

$ ls
myscript.sh
conf/gpg-agent.conf

질문:

  1. 위의 예제 명령을 실행할 때 gpg-agent가 사용자 정의 구성을 사용하도록 하려면 어떻게 해야 합니까?

  2. 질문 1)이 가능하지 않은 경우 gpg-agent가 자동으로 실행되는 위에 제공된 명령 예제를 실행할 때 gpg-agent가 실행되지 않도록 하려면 어떻게 해야 합니까?

답변1

벌써 1년이 넘었습니다. 그래서 문제를 해결했습니다. 문제는 --daemon여기에 설명된 옵션을 사용하는 버그로 인해 발생합니다 .https://dev.gnupg.org/T5076,

즉, gpg 명령을 실행하려고 할 때 기존 프로세스가 이미 존재하는 경우 gpg-agent는 다른 프로세스를 생성해서는 안 되지만 고집스럽게 기존 gpg-agent 프로세스를 사용하지 않고 사용자 정의 구성을 사용하지 않습니다. 자신만의 임의 프로세스를 생성합니다. .

--supervised그래서 제 경우에는 시스템 사용자를 위한 해결책은 gpg-agent를 시작할 때 이 옵션을 사용해야 한다는 것입니다 . 이 옵션은 절대 사용하지 마세요 --daemon.

자세한 내용은:

이 옵션을 사용하는 것은 옵션과 함께 실행하는 것만큼 간단 --supervised하지 않습니다 . --daemon이 감독자 모드는 서로 통신하기 위해 서비스 파일과 소켓 파일이 필요하며 다음을 전달해야 합니다 systemctl. systemd 파일은 다음과 같습니다(이 링크에서는 활성화하는 방법에 대한 모든 내용을 설명합니다).

https://github.com/gpg/gnupg/tree/master/doc/examples/systemd-user

gpg-agent.service따라서 사용자 정의 옵션을 사용하도록 수정한 다음 systemctl --user start gpg-agent. 그 후에는 모든 gpg 명령이 새 프로세스를 생성하는 대신 이 프로세스를 사용합니다. 현재 실행 중인 프로세스 ID를 보려면 gpg-agent다음을 수행할 수 있습니다.

systemctl --user status gpg-agent

글쎄, 위의 내용은 이전의 첫 번째와 두 번째 질문에 대한 답변입니다. 두 번째 문제는 gpg-agent 실행을 방해하지 않지만 추가 gpg-agent 프로세스를 생성하지 않습니다. 이는 여러 gpg-agent 프로세스가 실행 중이고 비밀번호 확인 오류가 발생하기 때문에 이전에 해결하려고 했던 문제이기 때문입니다. 옵션을 사용하여 실행하세요 --daemon. 여기서 언급한 버그는 위의 gpg 버그 추적기에도 설명되어 있습니다. 따라서 두 번째 질문의 목표는 각 gpg 명령이 gpg-agent를 자동으로 시작하지 못하도록 방지하여 수동으로 시작할 수 있도록 하는 것입니다. 하지만 options 을 사용할 때는 더 이상 이 방법이 필요하지 않습니다 --supervised.

관련 정보