나는 이 가이드와 답변을 따르려고 노력하고 있습니다
- https://wiki.gnupg.org/AgentForwarding
- https://superuser.com/questions/161973/how-can-i-forward-a-gpg-key-via-ssh-agent
- https://gist.github.com/TimJDFletcher/85fafd023c81aabfad57454111c1564d
그리고 그 일을 하기 위해 내가 찾을 수 있는 다른 것들은:
- macOS에서 Ubuntu 18.04로 SSH
gpg --decrypt
원격 시스템에서 수행할 수 있도록 로컬 gpg 에이전트를 전달하십시오 .
원격 컴퓨터의 공개 키를 --export
편집했습니다 . --import
원격 gpg는 에 있는 프록시 소켓
/run/user/1001/gnupg/S.gpg-agent
과 에 있는 추가 소켓 에 대해 보고합니다 /run/user/1001/gnupg/S.gpg-agent.extra
.
그러나 ssh -v -R /run/user/1001/gnupg/S.gpg-agent:/Users/rasmus/.gnupg/S.gpg-agent.extra -l rasmus <remote-host>
경고하려고
경고: 수신 경로 /run/user/1001/gnupg/S.gpg-agent에 대한 원격 포트 전달에 실패했습니다.
이는 systemd가 이미 원격 소켓을 소유하고 있기 때문일 수 있습니다.
$ sudo journalctl -xe
…
Mar 11 15:06:21 pact-cube sshd[4972]: error: bind: Address already in use
Mar 11 15:06:21 pact-cube sshd[4972]: error: unix_listener: cannot bind to path: /run/user/1001/gnupg/S.gpg-agent
macOS에서 Ubuntu 18.04로 gpg 에이전트를 전달하려면 어떻게 해야 합니까? 두 시스템 모두에서 필수 GPG 및 SSH 버전을 사용하십시오.
답변1
gpg 전달 기능을 얻는 가장 쉬운 방법은 먼저 systemd에 이러한 소켓 간섭을 중지하라고 지시하는 것입니다. sudo 권한 없이 현재 사용자에 대해 원격 측에서 다음 명령을 실행하면 이 작업을 수행할 수 있습니다.
systemctl --user 'disable' 'gpg-agent.socket'
systemctl --user 'disable' 'gpg-agent-extra.socket'
systemctl --user 'stop' 'gpg-agent.socket'
systemctl --user 'stop' 'gpg-agent-extra.socket'
불필요한 문제가 있는 구성 요소를 제거한 후 다음 단계는 콘센트를 배치할 위치를 결정하는 것입니다. 실행하면 쉽게 완료됩니다 gpgconf --list-dirs
. (이러한 소켓 디렉토리는 다음과 같이 하드코딩되어 있습니다.메인디렉토리.c. gnupg를 패치하고 다시 컴파일하지 않으면 구성할 수 없습니다. )
필요한 것은 클라이언트 소켓이 서버로 전달되고 오작동하는 제3자가 이를 유지하는 것뿐입니다. SSH 구성 블록은 다음 명령을 실행하여 생성할 수 있습니다. (update $remote)
remote='host.example.com'
local_sock=$( gpgconf --list-dirs | sed -n 's/agent-extra-socket://p' )
remote_sock=$( ssh $remote "gpgconf --list-dirs" | sed -n 's/agent-socket://p' )
echo "Host $remote\n RemoteForward $remote_sock $local_sock"
일반적으로 다음과 유사한 결과가 생성됩니다. (숫자 uid:s는 확실히 다를 수 있습니다.)
Host host.example.com
RemoteForward /run/user/1/gnupg/S.gpg-agent /run/user/2/gnupg/S.gpg-agent.extra
systemd가 퇴거되더라도 이러한 파티에 나타나는 경향이 있는 또 다른 초대받지 않은 손님이 있습니다. 이는 원격 시스템의 SSH 에이전트입니다. 우리가 원하는 유일한 것은 로컬 프록시이므로 원격으로 실행 중인 프록시를 종료하여 소켓 전달을 차단하는 것을 중지해야 합니다.
ssh $remote "pkill gpg-agent"
gpg
프록시 전달을 활성화하지 않고 사용을 시도할 때마다 마지막 단계가 필요할 수 있습니다. 소켓을 사용할 수 없을 때 오류 메시지와 함께 종료되도록 gpg:s 구성이 업데이트되지 않는 한, 어떤 키로도 절대 신뢰할 수 없는 어리석은 원격 에이전트를 시작하려고 시도하는 것이 아닙니다. 이는 다음을 통해 수행할 수 있습니다.
ssh $remote "echo 'no-autostart' >> .gnupg/gpg.conf"
요약하면 다음과 같이 ssh -v
말해야 합니다.원격 전달 성공....
답변2
사용되지 않는 소켓 파일을 삭제합니다.
ssh mylinuxserver 'rm /run/user/1001/gnupg/S.gpg-agent'
그런 다음 연결하십시오.
ssh -vvv mylinuxserver
이는 에 이미 RemoteForward
있다고 가정합니다 ~/.ssh/config
.
# File: ~/.ssh/config
[...]
Host mylinuxserver
HostName mylinuxserver.example.com
#RemoteForward <socket_on_remote_box> <extra_socket_on_local_box>
RemoteForward /run/user/1001/gnupg/S.gpg-agent /Users/rasmus/.gnupg/S.gpg-agent.extra
[...]
자세한 출력에는 다음과 비슷한 내용이 표시됩니다.
debug1: remote forward success for: listen /run/user/1001/gnupg/S.gpg-agent:-2, \
connect /Users/rasmus/.gnupg/S.gpg-agent.extra:-2
그런 다음 원격 시스템에서 gpg-agent를 사용하면 작동합니다.
매번 사용되지 않는 소켓 파일을 삭제하지 않으려면 다음과 같이 StreamLocalBindUnlink yes
서버에 추가하세요./etc/ssh/sshd_config
https://wiki.gnupg.org/AgentForwarding
Fedora Linux에서 이 작업을 수행하려는 사람은 참고하십시오. 소켓 활성화가 작동하려면 Fedora Linux 워크스테이션에서 두 개의 소켓을 활성화해야 했습니다.
systemctl --user enable gpg-agent.socket
systemctl --user enable gpg-agent-extra.socket
gpg-agent.service
그런 다음 요청 시 다음 두 소켓에 의해 트리거될 것이라고 보고합니다 .
$ systemctl --user status gpg-agent.service
○ 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.socket
Docs: man:gpg-agent(1)