Commit Signing – GnuPG Agent Forwarding

Source: Dev.to | Dec 24, 2025 (UTC)

Overview

Most corporate networks prevent development on company issued laptops. Often developers must rely on using either virtual or cloud instances within an isolated network. This separation helps secure the rest of the network but could potentially expose the supply chain if proper precautions are not taken. Often when developers are required to sign commits, or code it is just easier to setup signing on the instance you develop from. But, it is much safer to use GnuGP agent forwarding instead leaving your keys somewhere that they can be stolen. This article will show how to setup agent forwarding for this.

Configure GPG Agent Forwarding with SSH support

First we will copy the public key we exported to the target system.

scp "${HOME}/${gpg_asc}" "${remote_user}@${remote_host}:~"

Enter fullscreen mode

Exit fullscreen mode

Now import it.

ssh "${remote_user}@${remote_host}" \ gpg --import "~/${gpg_asc}"

Enter fullscreen mode

Exit fullscreen mode

Configure GPG to use SSH.

cat > "${GNUPGHOME}/gpg-agent.conf" <EOF enable-ssh-support default-cache-ttl 600 max-cache-ttl 7200 EOF

Enter fullscreen mode

Exit fullscreen mode

Ensure the gpg-agent is started when a terminal is first opened.

cat > "${HOME}/.zshrc.d/gpg-agent" <EOF export GPG_TTY="$(tty)" gpg-connect-agent reloadagent /bye >/dev/null alias pinentry=/opt/homebrew/bin/pinentry EOF

Enter fullscreen mode

Exit fullscreen mode

✏️ NOTE
It’s important to ensure the pinentry is setup correctly according to your distribution.

Determine the path to your local GPG socket.

extra_socket_on_local_box=$( gpgconf --list-dir agent-extra-socket )

Enter fullscreen mode

Exit fullscreen mode

Determine the path to the GPG socket on your remote box.

socket_on_remote_box=$( ssh "${remote_user}@${remote_host}" \ gpgconf --list-dir agent-socket )

Enter fullscreen mode

Exit fullscreen mode

Setup SSH to map the GPG extra socket to that of its remote.

cat > "${HOME}/.ssh/config" <<EOF Host gpgtunnel HostName ${remote_host} RemoteForward ${socket_on_remote_box} ${extra_socket_on_local_box} EOF

Enter fullscreen mode

Exit fullscreen mode

Reconfigure SSH so that GPG agent will use the remote socket instead starting the local one.

ssh "${remote_user}@${remote_host}" \ sudo bash -c "cat > /etc/ssd/sshd_config.d/gpg-agent.conf <<EOF StreamLocalBindUnlink yes EOF"

Enter fullscreen mode

Exit fullscreen mode

Restart SSH.

ssh "${remote_user}@${remote_host}" \ sudo systemctl restart sshd

Enter fullscreen mode

Exit fullscreen mode

Ensure remote gpg-agent is not running.

ssh "${remote_user}@${remote_host}" \ gpgconf --kill gpg-agent

Enter fullscreen mode

Exit fullscreen mode

Test that everything is loaded.

ssh "${remote_user}@${remote_host}" \ gpg --list-keys; \ gpg --list-secret-keys

Enter fullscreen mode

Exit fullscreen mode

Now you should be able to do commit signing from you remote development box.

References

For further actions, you may consider blocking this person and/or reporting abuse

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Читайте також