====== gpg-agent forwarding ======
Search tags: ''pgp'' ''gpg'' ''remote'' ''gpg-agent'' ''gpg-agent forwarding''.
Source:
* [[https://mlohr.com/gpg-agent-forwarding/|GPG Agent Forwarding by Matthias Lohr]]
* [[https://wiki.gnupg.org/AgentForwarding|Forwarding gpg-agent to a remote system over SSH]]
===== local machine =====
Ensure ''gpg-agent'' is running:
# Launch gpg-agent if not started
export GPG_TTY="$(tty)"
gpgconf --launch gpg-agent
Public and secret key must be present on local machine
gpg --import usert@example.com-public.asc
gpg --import usert@example.com-secret.asc
Get ''gpg-agent'' socket paths on local and **remote** machines:
$ gpgconf --list-dirs agent-extra-socket
/run/user/1000/gnupg/S.gpg-agent.extra
$ ssh remote gpgconf --list-dirs agent-socket
/run/user/1000/gnupg/S.gpg-agent
Edit SSH user configuration and add sockets forwarding for remote host:
Host remote
RemoteForward /run/user/1000/gnupg/S.gpg-agent /run/user/1000/gnupg/S.gpg-agent.extra
===== remote machine =====
Public key must be imported on remote machine:
gpg --import usert@example.com-public.asc
gpg: key XXXXXXXXXXXXX: public key "User " imported
gpg: Total number processed: 1
gpg: imported: 1
Modify ssh server configuration to enable automatic removal of stale sockets when connecting to the remote machine:
StreamLocalBindUnlink yes
and restart sshd: systemctl restart ssh
===== usage =====
On remote machine:
gpg --list-secret-keys
Sign message:
echo TEXT | gpg -s
===== Issues =====
''gpg: signing failed: Inappropriate ioctl for device''
gpg-agent[2022]: command 'SCD' failed: Forbidden
gpg-agent[2022]: command 'KEYINFO' failed: Forbidden
gpg-agent[3881]: No $DBUS_SESSION_BUS_ADDRESS found, falling back to curses
gpg-agent[3881]: Failed to lookup password for key n/63B10EA3FEB8F818AEC11B943DFF4F7A33E4624D with secret service: Cannot autolaunch D-Bus without X11 $DISPLAY
gpg-agent[2022]: failed to unprotect the secret key: Inappropriate ioctl for device
gpg-agent[2022]: failed to read the secret key
gpg-agent[2022]: command 'PKSIGN' failed: Inappropriate ioctl for device
Problem with displaying password prompt.
Solution (exec on host)
echo "UPDATESTARTUPTTY" | gpg-connect-agent > /dev/null 2>&1