Ubuntu에서 OpenSSH의 키 관리를 gpg-agent에 의뢰합니다 [결정판일 수도 있습니다]

OpenSSH에서 ssh-agent를 GnuPGgpg-agent로 교체함으로써 키 관리를 GnuPG측에 의뢰할 수 있다.참고로 gpg-agent는 GnuPG 비밀 키 관리의 핵심 구성 요소로 암호문을 일정 시간 캐시함으로써 사용자의 키 조작을 절약할 수 있다(캐시가 없는 키 자체).또한 원격 gpg-agent 간의 협력도 가능하다.
그러나 Ubuntu를 포함한 Debian 시스템 발행OpenSSH의 키 관리는 ssh-agent를 사용하는 것을 전제로 구성되어 있기 때문에 gpg-agent를 바꾸려면 설정 변경이 필요하다.이 글은 설정 변경[1]을 간략하게 요약할 것이다.

Ubuntu 설정 변경


gpg-agent 서비스의 확인


우선 gpg-agent가 서비스로 운영되는지 확인하세요.
$ systemctl --user status gpg-agent
● gpg-agent.service - GnuPG cryptographic agent and passphrase cache
     Loaded: loaded (/usr/lib/systemd/user/gpg-agent.service; static)
     Active: inactive (dead)
TriggeredBy: ● gpg-agent-extra.socket
             ● gpg-agent-browser.socket
             ● gpg-agent-ssh.socket
             ● gpg-agent.socket
       Docs: man:gpg-agent(1)
에서는 로그인하자마자 gpg-agent가 시작되지 않은 상태이지만 방문TriggeredBy과 같은 4개의 플러그인을 통해 시작합니다.소켓에 gpg-agent-ssh.socket이 포함되어 있으면 문제가 없습니다.덧붙여 말하자면, 플러그인의 실질은 gpgconf 명령으로 확인할 수 있다.
$ gpgconf --list-dirs | grep socket
socketdir:/run/user/1000/gnupg
dirmngr-socket:/run/user/1000/gnupg/S.dirmngr
agent-ssh-socket:/run/user/1000/gnupg/S.gpg-agent.ssh
agent-extra-socket:/run/user/1000/gnupg/S.gpg-agent.extra
agent-browser-socket:/run/user/1000/gnupg/S.gpg-agent.browser
agent-socket:/run/user/1000/gnupg/S.gpg-agent

Xsession.options 변경


다음은/etc/X11/Xsession입니다.options 파일을 확인합니다.
/etc/X11/Xsession.options
# $Id: Xsession.options 189 2005-06-11 00:04:27Z branden $
#
# configuration options for /etc/X11/Xsession
# See Xsession.options(5) for an explanation of the available options.
allow-failsafe
allow-user-resources
allow-user-xsession
use-ssh-agent
use-session-dbus
그중use-ssh-agent의 설명을 no-use-ssh-agent로 바꾸다.물론 변경은 관리자의 권한이 필요하니 주의하세요.백업하면서 일해요.

gnome-keyring-ssh.데스크톱을 autostart에 넣을게요.


/etc/xdg/autoostart/디렉터리에서 gnome-keyring-ssh.데스크톱 파일이 있습니다. 우선 이 파일을 ~/에 놓으십시오.디렉토리로 복사합니다.디렉토리가 없을 때 생성됩니다.
$ cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/
gnome-keyring-ssh.데스크톱 파일의 내용은 텍스트이지만 복사된 이 파일의 끝에 있습니다
추기 행.

[2021-06-05 추기] 우분투 21.04의 경우


2021년 4월 발매되는 우분투 21.04에서는 이 설정이 좋지 않은 것으로 보인다.이 경우 우선 응급조치를 취해야 한다.bashrc로
Hidden=true
환경 변수 SSHAUTH_SOCK을 직접 지정하면 됩니다.

gpg-agent.conf 설정


마지막.gnupg/gpg-agent.conf 파일에 다음 내용을 기록합니다.gpg-agent.conf 파일이 없으면 만드십시오.
~/.gnupg/gpg-agent.conf
export SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
dbus-update-activation-environment --systemd SSH_AUTH_SOCK
다음 두 가지 옵션은 임의로 다음과 같은 의미가 있다.
옵션 이름
컨텐트default-cache-ttl-ssh이전에 액세스한 캐시 항목의 유효 기간을 초 단위로 지정합니다.기본값은 1800max-cache-ttl-ssh캐시 항목의 최대 유효 기간을 초 단위로 지정합니다.액세스하든 안 하든 이 기간이 지나면 캐시가 지워집니다.기본값은 7200입니다.
유효기간이 지나치면 누설 위험이 높아지므로 적당히 해야 한다(웃음)
이렇게 설정하면 완성됩니다.신중을 기하기 위해 다시 로그인하세요.

환경 변수 확인


다시 로그인한 후 환경 변수를 확인합니다.
enable-ssh-support
default-cache-ttl-ssh 1800
max-cache-ttl-ssh 7200
의 느낌AUTH_SOCK 환경 변수의 값이 gpg-agent의 플러그라면 OK.

GnuPG를 이용한 키 관리


기존 OpenSSH 인증 키 등록


상기 설정이 완료되면 ssh-add 명령으로 기존 OpenSSH 인증 키를 GnuPG 키 묶음에 간단하게 등록할 수 있습니다.
$ env | grep SSH
SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh
이때 ssh-add 명령을 기반으로 한 암호문 입력과 달리 GunPG를 기반으로 한 Pinentry의 암호문 설정을 한다(2곳에 확인을 포함해야 한다).
Pinentry
GnuPG 키열에 등록된 인증 키는 이 암호문에 의해 보호됩니다.
중요한 일이기 때문에 중복됩니다. 등록된 기밀 키가 캐시되지 않고 GnuPG 키 묶음 (~/.gnupg/privte-keys-v1.d/디렉터리) 에 들어갑니다.또, 또.gnupg/sshcontrol 파일로 만들기
$ ssh-add ./id_ecdsa
Enter passphrase for ./id_ecdsa: 
Identity added: ./id_ecdsa ([email protected])
의 느낌에 키 정보가 추가되었습니다.
참고로 A5353D587000D820669B0BD55A0B4AD6897458DB는 키grip이라고 불리는 값으로 키의 종류와 상관없이 통일적으로 표시된 ID입니다.또 열쇠야.gnupg/private-keys-v1.d/디렉토리에 들어오는 키는 A5353D58700D820669B0D55A0B4AD6897458DB입니다.키처럼 키grip과 관련된 파일 이름으로 저장됩니다.또 말미0는 현금 주기(초)를 가리키는 것 같다.0보다 크면 gpg-agent.conf 파일을 지정하는 것보다 우선이죠.
행의 첫 번째 태그!에 있으면 키 사용을 비활성화할 수 있습니다.

GnuPG 키를 OpenSSH 인증 키로 설정


GnuPG 키도 OpenSSH 인증 키로 설정할 수 있습니다.하지만 전용 인증 키를 만들어야 합니다.자세한 내용은 졸문을 참조하시오.
https://text.baldanders.info/openpgp/ssh-key-management-with-gnupg/
참고해주세요.예컨대
# ECDSA key added on: 2020-06-01 14:05:35
# Fingerprints:  MD5:e4:5b:66:a6:03:9a:a4:0e:f2:1b:a5:04:72:93:f3:f0
#                SHA256:DtXgQm9rz7Dc5M5yWu/CNVo341o1rcfN9UCyYu+SZU4
A5353D587000D820669B0BD55A0B4AD6897458DB 0
키가 있을 때 마지막 [A]에 표시된 하위 키는 OpenSSH 인증 키로 사용할 수 있지만 이 키의 키grip 값은 ~/로 사용할 수 있습니다.gnupg/sshcontrol 파일에 로그인합니다.
$ gpg --list-keys --with-keygrip alice
pub   ed25519 2021-01-06 [SC] [有効期限: 2021-01-13]
      011C720B03D2E1D6BCFA98391DFF44901121B61D
      Keygrip = 97249ABEB2A2FD9E88F6723BB19D4F84B90E261A
uid           [  究極  ] Alice <[email protected]>
sub   cv25519 2021-01-06 [E]
      Keygrip = 96CB831965E1A7EB4705577D6A7CB7F9E05C8192
sub   ed25519 2021-01-06 [A]
      Keygrip = F5C774B5B418B6E0B5B7942F93DE82BF2FEF4C8E

등록된 키 확인


등록된 키는 명령ssh-add -l으로 확인할 수 있습니다.공개 키 꺼내기 ssh-add -L 명령이 가능합니까?GnuPG에서 만든 키라면
$ echo F5C774B5B418B6E0B5B7942F93DE82BF2FEF4C8E 0 >> ~/.gnupg/sshcontrol
도 빼낼 수 있어요.

참조 페이지


https://curiouslynerdy.com/gpg-agent-for-ssh-on-ubuntu/
https://text.baldanders.info/remark/2020/06/upgrade-openssh-key/
https://text.baldanders.info/openpgp/build-gnupg-in-ubuntu/

참고서


https://www.amazon.co.jp/dp/B015643CPE
각주
Windows의 경우 오래된 기사가 있어서 죄송합니다. 졸문 "Windows: gpg-agent"을 참조하십시오.↩︎

좋은 웹페이지 즐겨찾기