GitHub SSH Setup with 1Password
How to set up SSH key authentication for GitHub using 1Password as the SSH agent. The private key never touches disk — 1Password manages it.
Prerequisites
- 1Password desktop app installed with SSH agent enabled
- 1Password CLI (
op) installed and signed in - GitHub CLI (
gh) installed and authenticated
SSH keys are stored in the Shared-Infrastructure vault — this is where all infra-level credentials live (SSH keys, PATs, server details). See vps-setup.md for the full vault structure and secret storage conventions.
How It Works
git push → SSH → 1Password SSH Agent → signs with private key → GitHub verifies public key
- 1Password stores the SSH private key (never on disk)
- 1Password's SSH agent provides the key to SSH on demand
~/.ssh/configtells SSH to use 1Password's agent forgithub.com- GitHub has the matching public key on your account
Setup Steps
1. Enable 1Password SSH Agent
In the 1Password desktop app:
- Settings → Developer → Turn on SSH Agent
- This creates the agent socket at:
~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock
2. Register the Key in the SSH Agent Config
The 1Password SSH agent only serves keys that are explicitly listed in its config file:
~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.toml
Add an entry for your key:
[[ssh-keys]]
item = "GitHub SSH Key"
vault = "Shared-Infrastructure"
Keys are offered to SSH servers in the order they appear in this file. You can verify which keys the agent is serving:
SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock ssh-add -l
By default, only keys in the Private vault are enabled. Keys in other vaults (like Shared-Infrastructure) must be added to agent.toml or they won't be offered.
3. Create an SSH Key in 1Password
op item create \
--category=sshkey \
--title="GitHub SSH Key" \
--vault="Shared-Infrastructure" \
--ssh-generate-key=ed25519
Note the public key from the output (starts with ssh-ed25519 AAAA...).
4. Add the Public Key to GitHub
gh ssh-key add <(echo "ssh-ed25519 AAAA...your-key-here...") --title "GitHub SSH Key (1Password)"
Or manually: GitHub → Settings → SSH and GPG keys → New SSH key.
5. Configure SSH
Add a Host github.com block to ~/.ssh/config (before any Host * block):
Host github.com
User git
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
If you don't already have a catch-all IdentityAgent, add it:
Host *
IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
6. Add GitHub's Host Key
Fetch the host key and verify its fingerprint before trusting it:
# Fetch the key to a temp file
ssh-keyscan github.com > /tmp/github_host_key 2>/dev/null
# Verify the fingerprint matches GitHub's published fingerprints
# See: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
ssh-keygen -lf /tmp/github_host_key
# If the fingerprint matches, add it
cat /tmp/github_host_key >> ~/.ssh/known_hosts
rm /tmp/github_host_key
7. Test
ssh -T git@github.com
# Expected: Hi <username>! You've successfully authenticated...
8. Set Git Remotes to SSH
# New repos
git remote add origin git@github.com:username/repo.git
# Existing repos (switch from HTTPS to SSH)
git remote set-url origin git@github.com:username/repo.git
# Set gh CLI to use SSH
gh config set git_protocol ssh
Troubleshooting
| Problem | Fix |
|---|---|
Permission denied (publickey) | Open 1Password app → make sure SSH agent is enabled and the key is in an accessible vault |
Host key verification failed | Run ssh-keyscan -t ed25519 github.com > /tmp/gh_host && ssh-keygen -lf /tmp/gh_host — verify the fingerprint against GitHub's docs, then cat /tmp/gh_host >> ~/.ssh/known_hosts |
ssh -T hangs | Check that the IdentityAgent path is correct and 1Password is running |
| Key not offered | Check agent.toml — the key must be listed there. Run ssh-add -l to verify. If empty, the agent isn't serving any keys. |
Current Configuration
- Key: "GitHub SSH Key" in Shared-Infrastructure vault (ed25519)
- GitHub account: langhalsb
- SSH config:
~/.ssh/configwithHost github.comblock - Agent socket:
~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock - gh CLI protocol: SSH (
gh config set git_protocol ssh)
Why ed25519?
All SSH keys use the ed25519 algorithm (Edwards-curve Digital Signature Algorithm on Curve25519). Compared to RSA: shorter keys, faster signing, no known weaknesses. It's the modern default.
Related Docs
- VPS Setup — full VPS provisioning guide, 1Password vault structure, and secret storage conventions