Letting 1Password run your SSH agent is neat! Itâll hold your keys, and prompt you to authorise each use pretty seamlessly with your password or thumbprint.
For the use case weâll be talking about here, we can use it as a git commit signer. For me, this was way easier than the setup I had before: No GPG, no having to add an ssh-agent call to your shellâs startup prompt, and having to type a password to use a protected key every single time and so on.
This is how itâs doneâŠ
Enable the 1Password SSH Agent
Open 1Passwordâs settings:

Then look at the Developer section for the SSH Agent setting:

If it says running next to SSH Agent, youâre golden!
Get (or Create) an SSH Key
Two options here:
- Generate one inside 1Password (my preferred): in 1Password, create a new SSH Key item and let 1Password generate the key pair for you. The private key never touches disk, it lives in the vault. This is the cleanest option if youâre going all-in on 1Password.
- Use a key thatâs already on disk: you probably already have one at
~/.ssh/id_ed25519.pub. If you donât,ssh-keygen -t ed25519will sort you out. You can then drag the private key into 1Password after the fact, or just leave it where it is and let 1Passwordâs agent pick it up.
Either way, grab the public key (1Password has a âCopy public keyâ action on the item; for a disk key itâs just the contents of the .pub file) and add a new signing key on GitHub.
Important bit: click the Key Type dropdown and pick Signing Key, not Authentication Key:

(Itâs the same key material, different role here)
.gitconfig Setup
There are two ways to wire this up: let 1Password generate the config for you (what I do), or write it by hand.
Option 1: Let 1Password Generate It
Open the SSH Key item in 1Password and hit the âConfigure Git Commit Signingâ option. It writes a file to ~/.config/1password/gitconfig that looks roughly like:
[user]
email = you@users.noreply.github.com
name = Your Name
signingkey = ssh-ed25519 AAAAC3Nz... your-key-comment
[gpg]
format = ssh
[gpg "ssh"]
program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign"
[commit]
gpgsign = true
[tag]
forceSignAnnotated = true
gpgsign = true
Then pull it into your main ~/.gitconfig via an include:
[include]
path = ~/.config/1password/gitconfig
The magic line is gpg.ssh.program. op-ssh-sign is 1Passwordâs signing helper, and itâs what lets git sign commits without ever pulling the private key out of the vault.
Option 2: Do It By Hand
If youâd rather keep everything in one file, drop this into ~/.gitconfig directly:
[user]
email = <your email>
name = <your name>
signingkey = ~/.ssh/id_ed25519.pub
[commit]
gpgsign = true
[tag]
forceSignAnnotated = true
gpgsign = true
[gpg]
format = ssh
[gpg "ssh"]
program = "/Applications/1Password.app/Contents/MacOS/op-ssh-sign"
signingkey: git accepts either a path to a public key file (whatâs shown above), or the literal public key prefixed with key:: (like key::ssh-ed25519 AAAA...). If you look at the file 1Password generates, it uses the raw ssh-ed25519 AAAA... form with no prefix, which also works. The git docs call that form deprecated but itâs still tolerated for backward compat, hence 1Passwordâs choice.
For the email, Iâve switched to using the GitHub noreply option. For me thatâs petems@users.noreply.github.com, but theyâve recently added an option to hide your email address completely as well:

Push a test commit somewhere and check for the little Verified badge next to it on GitHub:

Boom, done!
Troubleshooting
If it doesnât seem to be signing, run:
git log --show-signature -1
If you get error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification, create ~/.config/git/allowed_signers with a line like:
your-email ssh-public-key-name ssh-public-key
Then tell git about it:
git config --global gpg.ssh.allowedSignersFile ~/.config/git/allowed_signers
That should fix it!
Bonus: Use 1Password as Your Full SSH Agent
Strictly, you donât need this bit for commit signing. The op-ssh-sign helper we set up in the .gitconfig talks to 1Password directly, it doesnât read SSH_AUTH_SOCK at all. 1Passwordâs docs say so themselves:
Set
gpg.ssh.programto the SSH signer binary provided by 1Password, so you donât have to setSSH_AUTH_SOCKyourself.
So if all you want is signed commits, you can stop reading now.
But most of us use SSH for plenty of other things: ssh user@host, pushing over git+ssh, GUI SSH clients like Termius, forwarding an agent into a dev container or a remote VM. All of those read SSH_AUTH_SOCK to find an agent. Point that variable at the 1Password socket and those tools transparently use your 1Password-held keys too, with the same authorise-with-Touch-ID prompt you get for commits.
1Passwordâs docs have a LaunchAgent plist that wires it up on boot:
mkdir -p ~/Library/LaunchAgents
cat << EOF > ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.1password.SSH_AUTH_SOCK</string>
<key>ProgramArguments</key>
<array>
<string>/bin/sh</string>
<string>-c</string>
<string>/bin/ln -sf \$HOME/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock \$SSH_AUTH_SOCK</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
launchctl load -w ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
References
GitHub Docs
1Password
- Sign Git commits with SSH (1Password Developer docs)
- Sign your Git commits with 1Password (1Password blog, Sep 2022)