SSH를 통한 GnuPG(PGP) SmartCard를 Yubikey가 있는 VM에 연결
이 주제에 대해 내가 찾은 대부분의 블로그 게시물은 5년 이상 된 것이었고 GnuPG 2.1 이전의 시간을 참조하고 있었습니다. GnuPG 2.1은 이 프로세스를 가능하고 안전하게 만드는 몇 가지 실제 변경 사항이 있는 곳이었습니다. 요즘에는 Ubuntu 20.04와 같은 LTS 배포판에도 GnuPG 2.2가 포함되어 있습니다. GnuPG 2.2는 아직 더 단순하고 더 적은 수의 후프를 통과해야 합니다.
내 목표는 간단해 보였습니다.
git+ssh://
리포지토리GPG 키(및 스마트 카드)를 SSH 인증 토큰으로 사용할 수 있지만 저는 그것에 관심이 없고 별도의 SSH 키와 GPG 키가 있으며 그 설정에 만족합니다.
충분히 새로운 소프트웨어가 있는지 확인하십시오.
# Workstation:
$ gpg --version
gpg (GnuPG) 2.3.4 # anything over 2.1 is fine
# VM (ssh target)
$ gpg --version
gpg (GnuPG) 2.2.19
관련 키 생성 또는 구성:
스마트 카드
범위 밖이지만 꽤 가능합니다. 다음 가이드를 따르세요.
# Workstation:
$ gpg --version
gpg (GnuPG) 2.3.4 # anything over 2.1 is fine
# VM (ssh target)
$ gpg --version
gpg (GnuPG) 2.2.19
스마트 카드
범위 밖이지만 꽤 가능합니다. 다음 가이드를 따르세요.
GPG 키 생성
$ gpg --gen-key
실명과 사용자 이메일 주소를 요청하고 이를 완성한 다음 일부 출력을 표시하는 대화형 프로그램입니다. 중요한 부분은 긴 키 ID입니다.
Real name: Example User
Email address: [email protected]
You selected this USER-ID:
"Example User <[email protected]>"
..... snip .....
pub ed25519 2022-04-06 [SC] [expires: 2024-04-05]
7B5CB440DA3A316537466897128986B90599B1B1
uid Example User <[email protected]>
sub cv25519 2022-04-06 [E] [expires: 2024-04-05]
이 경우
7B5CB440DA3A3...
는 키 ID입니다. 클립보드에 복사하거나 환경 변수로 내보냅니다. 이것이 많이 필요합니다.SSH 키 생성
이것을 실행하고 프롬프트를 따르십시오 ...
$ ssh-keygen
이것은
~/.ssh/id_rsa
또는 ~/.ssh/id_ecdsa
와 같은 것을 생성하거나 구성에 따라 무언가를 생성합니다.관련 소켓 주소 얻기
# On your local machine:
$ gpgconf --list-dirs agent-ssh-socket
/Users/<your username>/.gnupg/S.gpg-agent.ssh
$ gpgconf --list-dir agent-socket
/Users/leehambley/.gnupg/S.gpg-agent
$ gpgconf --list-dirs agent-extra-socket
/Users/<your username>/.gnupg/S.gpg-agent.extra
% On the remote machine:
$ gpgconf --list-dirs agent-ssh-socket
/run/user/<your numeric user id, probably>/gnupg/S.gpg-agent.ssh
$ gpgconf --list-dirs agent-socket
/run/user/<your numeric user id, probably>/gnupg/S.gpg-agent
GPG 에이전트 및 SSH 에이전트 소켓은 자체 설명이 필요하지만 "추가"소켓은 독특합니다. 문서에서 다음을 참조하세요.
Also listen on native gpg-agent connections on the given socket. The intended use for this extra socket is to setup a Unix domain socket forwarding from a remote machine to this socket on the local machine. A gpg running on the remote machine may then connect to the local gpg-agent and use its private keys. This enables decrypting or signing data on a remote machine without exposing the private keys to the remote machine.
그런 다음 추가 소켓은 권한이 약간 적은 소켓으로 원격 컴퓨터가 로컬 GPG 에이전트를 완전히 제어하지 않고도 원격 컴퓨터로 안전하게 전달할 수 있습니다(일반 소켓과 마찬가지로).
로컬 구성
# ~/.ssh/config
Host thevmweworkin
# this is standard SSH config, mostly
HostName 192.168.64.11
User vagrant
Port 22
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentitiesOnly yes
LogLevel FATAL
# This is the GPG/SSH forwarding
RemoteForward /run/user/<your numeric user id, probably>/gnupg/S.gpg-agent /Users/<your username>/.gnupg/S.gpg-agent.extra
RemoteForward /run/user/<your numeric user id, probably>/gnupg/S.gpg-agent.ssh /Users/<your username>/.gnupg/S.gpg-agent.ssh
ForwardAgent yes
ExitOnForwardFailure yes
# ~/.gnupg/agent-config.conf
cat ~/.gnupg/gpg-agent.conf
default-cache-ttl 600
max-cache-ttl 7200
pinentry-program /opt/homebrew/bin/pinentry-mac # brew install gnupg for this, or don't specify pin entry
extra-socket /Users/<your username>/.gnupg/S.gpg-agent.extra
enable-ssh-support
keep-display
default-cache-ttl 600
max-cache-ttl 7200
keep-tty
keep-display
# Your ~/.zshrc or ~/.bash_profile, etc
eval $(gpg-agent --daemon)
다음을 실행하여 에이전트가 올바른 구성으로 실행/다시 시작되는지 확인하십시오.
$ gpg-connect-agent reloadagent /bye # will start an agent if you didn't have one running
OK
원격 구성
서명 커밋을 요구하도록 Git을 구성합니다.
$ git config [--global] commit.gpgsign true
$ git config --global user.signingkey 34EC1A4D011E7FDFFD6E3722A4F823DC30FA9DA7! # the exclamation mark makes Git use this key, and not try and detect a subkey to use
이미 실행 중인 데몬의 로컬 소켓을 제거하고 오버바인딩할 수 있도록 SSH를 구성합니다.
/etc/ssh/sshd_conf
# add the following:
# https://superuser.com/questions/161973/how-can-i-forward-a-gpg-key-via-ssh-agent
StreamLocalBindUnlink yes
키를 어딘가(Github, Gitlab)에 업로드하고 VM 공개 키체인에 업로드합니다.
# From the host machine
gpg --output public.pgp --armor --export 34EC1A4D011E7FDFFD6E3722A4F823DC30FA9DA7
gpg --armor --export 34EC1A4D011E7FDFFD6E3722A4F823DC30FA9DA7 | pbcopy
scp public.pgp thevm:~/public.gpg
그런 다음 프로필로 이동하여 새 GPG 키를 프로필에 붙여넣습니다.
모든 것이 작동하는지 확인
Reference
이 문제에 관하여(SSH를 통한 GnuPG(PGP) SmartCard를 Yubikey가 있는 VM에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leehambley/gnupg-pgp-smartcard-over-ssh-to-a-vm-with-a-yubikey-kio텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)