데비안 10 서버가 있습니다. msmtp를 사용하여 이메일을 보내고 싶고 gpg 키의 비밀번호를 캐시해야 합니다. msmtp에 필요한 smtp 비밀번호는 이 gpg 키를 사용하여 파일에서 암호화됩니다. msmtp는 gpg를 사용하여 파일을 해독하여 smtp 비밀번호를 얻습니다.
다음 줄은 /etc/msmtprc 파일에 있습니다.
passwordeval gpg --no-tty -q -d /etc/.msmtp-password.gpg
gpg-agent와 키체인을 사용하여 gpg 키의 비밀번호를 캐시하려고 합니다.. 이를 통해 시스템은 비밀번호를 묻지 않고 이메일을 보낼 수 있습니다.
서버를 시작할 때마다 원합니다.gpg 키의 비밀번호를 한 번만 제출하면 해당 키의 비밀번호는 다음에 재부팅할 때까지 캐시됩니다.. (로그아웃했다가 다시 로그인하면 다음 재부팅 전에 gpg 키의 비밀번호를 제출할 필요가 없습니다.)
원격 호스트(Debian 서버)에서 로그아웃 했을 때 gpg-agent가 중지되어 성공하지 못했습니다. SSH 키체인을 통해 새 연결을 설정하면 새 에이전트가 새 PID로 시작되고 키의 비밀번호가 손실됩니다.
아래에서 제가 한 일을 볼 수 있을 것입니다. 이것이 유익한 정보가 되기를 바랍니다. 당신이 나를 도와주신다면 기쁘겠습니다.
내 리눅스 버전
cat /etc/issue
Debian GNU/Linux 10 \n \l
GP 버전
gpg --version
gpg (GnuPG) 2.2.12
libgcrypt 1.8.4
비밀 GPG 키를 생성하고 해당 키에 대한 비밀번호를 묻는 메시지가 표시됩니다
gpg --gen-key
...
Nom réel : [email protected]
Adresse électronique : [email protected]
Vous avez sélectionné cette identité :
« [email protected] <[email protected]> »
...
les clefs publique et secrète ont été créées et signées.
pub rsa3072 2020-10-15 [SC] [expire : 2022-10-15]
3C82AB1E9384F4A92CEBCE7077B1EDA25A942746
uid [email protected] <[email protected]>
sub rsa3072 2020-10-15 [E] [expire : 2022-10-15]
우리는 열쇠를 확인합니다
gpg --list-secret-keys --with-keygrip
...
sec rsa3072 2020-10-15 [SC] [expire : 2022-10-15]
3C82AB1E9384F4A92CEBCE7077B1EDA25A942746
Keygrip = 47CF9E2C933761CF1021731F72603B8291BB211C
uid [ ultime ] [email protected] <[email protected]>
ssb rsa3072 2020-10-15 [E] [expire : 2022-10-15]
Keygrip = 4133708B3FA225C4732A0F9FBD0053DEF937B46A
gpg-agent 프로세스의 PID를 확인합니다.
ps aux | grep gpg-agent
root 738 17.1 0.0 81204 3864 ? SLs 16:55 0:04 /usr/bin/gpg-agent --supervised
root 745 0.0 0.0 6092 824 pts/0 S+ 16:56 0:00 grep gpg-agent
gpg-agent에 알려진 키를 확인합니다.
gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 47CF9E2C933761CF1021731F72603B8291BB211C D - - - P - - -
S KEYINFO 4133708B3FA225C4732A0F9FBD0053DEF937B46A D - - - P - - -
OK
gpg-agent 옵션을 확인합니다
gpgconf --list-options gpg-agent
Monitor:1:0:Options contrôlant la sortie de diagnostique:0:0::::
...
default-cache-ttl:24:0:oublier les codes personnels après N secondes:3:3:N:600::
default-cache-ttl-ssh:24:1:oublier les clefs SSH après N secondes:3:3:N:1800::
max-cache-ttl:24:2:définir la durée maximale du cache de code personnel à N secondes:3:3:N:7200::
max-cache-ttl-ssh:24:2:définir la durée maximale du cache de clef SSH à N secondes:3:3:N:7200::
...
pinentry-timeout:24:1:set the Pinentry timeout to N seconds:3:3:N:0::
default-cache-ttl 및 max-cache-ttl이 너무 낮으면 gpg-agent는 10분 동안만 비밀번호를 캐시합니다. 키체인을 사용할 계획이라면 이 기간은 너무 짧습니다. 로그 파일을 추가할 수도 있습니다. gpg-agent.conf 파일을 추가하여 기본 옵션을 변경할 수 있습니다.
cat ~/.gnupg/gpg-agent.conf
default-cache-ttl 31536000
max-cache-ttl 31536000
log-file /var/log/gpg-agent
debug-level basic
새로운 gpg-agent 옵션이 추가되었는지 확인합니다.
gpgconf --list-options gpg-agent
Monitor:1:0:Options contrôlant la sortie de diagnostique:0:0::::
...
default-cache-ttl:24:0:oublier les codes personnels après N secondes:3:3:N:600::31536000
default-cache-ttl-ssh:24:1:oublier les clefs SSH après N secondes:3:3:N:1800::
max-cache-ttl:24:2:définir la durée maximale du cache de code personnel à N secondes:3:3:N:7200::31536000
max-cache-ttl-ssh:24:2:définir la durée maximale du cache de clef SSH à N secondes:3:3:N:7200::
...
pinentry-timeout:24:1:set the Pinentry timeout to N seconds:3:3:N:0::
새 옵션을 활성화하기 위해 gpg-agent 구성을 다시 로드합니다.
gpg-connect-agent reloadagent /bye
OK
우리가 열쇠고리를 설치한다는 것을 알아두세요
apt install -y keychain
키체인 버전
keychain -V
* keychain 2.8.5 ~ http://www.funtoo.org
GPG 키를 해독하기 위해 키체인 캐시를 사용합니다.
keychain --eval --agents gpg 3C82AB1E9384F4A92CEBCE7077B1EDA25A942746
* keychain 2.8.5 ~ http://www.funtoo.org
* Inheriting gpg-agent (738)
GPG_AGENT_INFO=/run/user/0/gnupg/S.gpg-agent:738:1; export GPG_AGENT_INFO;
* Adding 1 gpg key(s): 3C82AB1E9384F4A92CEBCE7077B1EDA25A942746
비밀번호를 입력했기 때문에 이제 해독된 GPG 키가 gpg-agent에 의해 캐시됩니다(1 참조).
gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 47CF9E2C933761CF1021731F72603B8291BB211C D - - 1 P - - -
S KEYINFO 4133708B3FA225C4732A0F9FBD0053DEF937B46A D - - - P - - -
OK
.bashrc 파일을 수정합니다. 다음에 키체인에 로그인하면 gpg-agent에 의해 캐시된 해독된 GPG 키를 찾을 수 있습니다. 다음 재부팅 시 키체인은 다음 재부팅 때까지 키에 대한 비밀번호를 한 번 묻습니다.
cat ~/.bashrc
...
# Note: PS1 and umask are already set in /etc/profile. You should not
# need this unless you want different defaults for root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022
...
eval $(keychain --agents gpg)
default-cache-ttl 및 max-cache-ttl을 확인하기 위해 gpg-agent 기본 구성을 초과하여 700초를 기다립니다.
jeudi 15 octobre 2020, 16:56:32 (UTC+0200)
jeudi 15 octobre 2020, 17:08:12 (UTC+0200)
gpg-agent에 알려진 키를 확인하고 해독된 GPG 키는 여전히 gpg-agent에 캐시되어 있습니다(1 참조).
gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 47CF9E2C933761CF1021731F72603B8291BB211C D - - 1 P - - -
S KEYINFO 4133708B3FA225C4732A0F9FBD0053DEF937B46A D - - - P - - -
OK
파일을 생성하고 이를 키로 암호화합니다(암호화에는 비밀번호가 필요하지 않습니다).
touch file.txt && gpg -e -r [email protected] file.txt
파일의 암호를 해독합니다. 해독된 GPG 키는 700초 후에도 gpg-agent에 의해 캐시되므로 비밀번호가 필요하지 않습니다.
gpg --decrypt file.txt.gpg > file.txt
gpg: chiffré avec une clef RSA de 3072 bits, identifiant 4E40A1918B514393, créée le 2020-10-15
« [email protected] <[email protected]> »
우리를로그아웃했다가 다시 로그인하세요.SSH를 통해 원격 호스트에 연결합니다. 새로 로그인하면 키체인이 캐시된 키를 사용하여 이전 gpg-agent를 찾을 수 없습니다. 그런 다음 키체인이 새 gpg-agent를 시작하지만 캐시된 키가 손실됩니다.
* keychain 2.8.5 ~ http://www.funtoo.org
* Starting gpg-agent...
인사
답변1
마침내 해결책을 찾았습니다.
gpg-agent는 bash 세션에서 로그아웃한 후 닫힙니다.감독 모델.
파일 보기:
/usr/share/doc/gpg-agent/README.Debian
시스템 =======
2.1.17부터 systemd가 있는 시스템의 사용자는 예상되는 gpg-agent 소켓(ssh 소켓 포함)에 처음 액세스할 때 systemd의 사용자 세션에 의해 gpg-agent 프로세스가 자동으로 시작됩니다. systemd는 세션이 로그오프될 때 프로세스를 완전히 종료합니다.
이제 gpg-agent를 시작해야 합니다.데몬 모드gpg-agent의 PID를 세션 전반에 걸쳐 동일하게 유지하십시오.
이 작업을 수행하기 전에 systemd에서 gpg-agent를 "차단"해야 합니다.
systemctl --user mask --now gpg-agent.service gpg-agent.socket gpg-agent-ssh.socket gpg-agent-extra.socket gpg-agent-browser.socket
이 작업은 "unmask" 옵션을 통해 취소할 수 있습니다(README.Debian 파일 참조).
다음에 gpg-agent가 요청되면(예: 키를 생성하거나 키체인을 사용할 때) 데몬 모드에서 시작되어 여러 세션에서 실행됩니다.
ps aux | grep gpg-agent
root 816 0.2 0.0 81356 3624 ? Ss 17:19 0:04 gpg-agent
--homedir /root/.gnupg --use-standard-socket --daemon
.bashrc 파일에 다음을 추가하세요.
eval $(keychain --eval --agents gpg secretkey)
로그아웃한 후 다시 로그인하면 키체인은 올바른 gpg-agent(PID 확인)를 찾고 비밀번호를 묻지 않습니다.
keychain 2.8.5 ~ http://www.funtoo.org
Found existing gpg-agent: 816
Known gpg key: 677AAEB080C1045F3D3D3532B5AE92F1F49350D1
비밀번호 없이도 파일을 해독할 수 있습니다
gpg --decrypt file.txt.gpg > file.txt
gpg: chiffré avec une clef RSA de 3072 bits, identifiant F1B9BB72AAECF1C7,
créée le 2020-10-16
« [email protected] <[email protected]> »
도움이 되었기를 바랍니다.