Advanced GPG multi-key management strategies for consultants, CI/CD automation, and enterprise teams. Configure, set up, run, and execute multi-key GPG workflows. Use when managing multiple GPG keys (personal + automation, per-client keys, enterprise keys), configuring CI/CD commit signing, implementing per-client key isolation, using conditional Git includes, setting up automated signing, or scaling GPG key strategies beyond single-key setups.
Limited to specific tools
Additional assets for this skill
This skill is limited to using the following tools:
references/backup-recovery.mdreferences/implementation-example.mdreferences/scenarios.mdAdvanced strategies for managing multiple GPG keys across different contexts: personal development, CI/CD automation, multi-client consultant work, and enterprise environments.
Multi-key GPG strategies enable:
This skill covers scaling from single-key (basic setup) to sophisticated multi-key architectures.
This skill should be used when:
Before using multi-key GPG strategies:
gpg --version (should show GnuPG 2.2+)git --version (should show Git 2.23+ for conditional includes)git:gpg-signing skill for single-key setup basics~/Clients/ recommended)| Scenario | Keys Needed | Passphrase | Expiration | Reference |
|---|---|---|---|---|
| Personal development only | 1 key | Yes | No (or 2y) | Basic Setup |
| Personal + CI/CD | 2 keys | Personal: Yes, Automation: No | No | Scenario 2 |
| Multi-client consultant | 3+ keys | All: Yes | 1 year | Scenario 3 |
| Enterprise team | 1 key | Yes | 1 year | Scenario 4 |
Are you a new GPG user?
├─ YES → Use gpg-signing skill first
└─ NO → Continue below
Do you need multiple keys?
├─ NO → Use gpg-signing skill (Scenario 1)
└─ YES → Continue below
Which applies to you?
├─ Personal projects + CI/CD automation → Scenario 2 (Personal + CI/CD)
├─ Multiple clients (consultant/contractor) → Scenario 3 (Multi-Client)
├─ Corporate/regulated environment → Scenario 4 (Enterprise)
└─ Unsure? → See references/scenarios.md for detailed comparison
For basic single-key setup, use the git:gpg-signing skill instead.
If you're new to GPG signing, start with the git:gpg-signing skill to:
Then return to this skill when you need multiple keys (CI/CD, clients, enterprise).
Two-Key Strategy:
Quick Setup:
gpg --armor --export-secret-keys <KEY_ID> > automation-private.ascSecurity trade-off: Automation key has NO passphrase (required for unattended operation), but is isolated from personal key and stored in encrypted GitHub Secrets.
Full workflow: See references/scenarios.md#scenario-2-personal--cicd
Per-Client Key Strategy:
Directory Structure:
~/Clients/
├── ClientA/
│ ├── .gitconfig-clienta
│ └── projects/
└── ClientB/
├── .gitconfig-clientb
└── projects/
Automatic Switching:
Global ~/.gitconfig uses includeIf to load per-client configs based on directory.
Quick Setup:
~/.gitconfig.gitconfig-clienta with client-specific keycd ~/Clients/ClientA && git config user.signingkeyFull workflow: See references/scenarios.md#scenario-3-multi-client-consultant
Follow Enterprise Policy:
Your organization will specify:
Typical Requirements:
Full workflow: See references/scenarios.md#scenario-4-enterprise-environment
Key Selection Order:
.git/config in specific repo).gitconfig with includeIf)~/.gitconfig)# List all secret (private) keys
gpg --list-secret-keys --keyid-format=long
GitHub allows unlimited GPG keys per account.
Steps:
gpg --armor --export <KEY_ID>Email Verification: Add all work emails to GitHub account and verify each. Commits signed with unverified email show "Unverified".
Common multi-key operations:
# List all keys
gpg --list-secret-keys --keyid-format=long
# Check which key Git is using
git config user.signingkey
git config user.email
# Switch key for specific repo
cd /path/to/repo
git config user.signingkey <KEY_ID>
# Test key switching with conditional includes
cd ~/Clients/ClientA/project
git config user.signingkey # Should show CLIENT_A_KEY_ID
# Verify commit signature
git log --show-signature -1
# Export key for backup
gpg --armor --export-secret-keys <KEY_ID> > backup.asc
Essential Backups:
Quick Backup:
# Export all private keys (encrypted)
gpg --armor --export-secret-keys > gpg-all-keys-backup.asc
gpg --symmetric --cipher-algo AES256 gpg-all-keys-backup.asc
# Secure storage locations
# ✅ Password manager (1Password, Bitwarden)
# ✅ Encrypted vault (VeraCrypt, Cryptomator)
# ✅ Hardware encrypted USB (in safe)
Recovery:
# Decrypt and import
gpg --decrypt gpg-all-keys-backup.asc.gpg > gpg-all-keys-backup.asc
gpg --import gpg-all-keys-backup.asc
Full procedures: See references/backup-recovery.md
| Key Type | Passphrase | Rationale |
|---|---|---|
| Personal | YES (20+ chars) | Defense-in-depth, laptop security |
| Automation | NO | Required for unattended CI/CD |
| Per-Client | YES (20+ chars) | Client data requires high security |
| Enterprise | YES (per policy) | Compliance requirement |
| Context | Expiration | Rationale |
|---|---|---|
| Personal projects | No expiration | GitHub default, manual rotation |
| Automation | No expiration | Simplicity, rotate if compromised |
| Per-client | 1 year | Enterprise best practice, forces review |
| Enterprise | Per policy | Typically 6 months to 1 year |
Why use multiple keys:
| Decision | Security | Convenience | Recommendation |
|---|---|---|---|
| Passphrase on personal key | ✅ High | ⚠️ Requires entry | ✅ Always use |
| Passphrase on automation key | ❌ Single-factor | ✅ Unattended operation | ✅ Required for CI/CD |
| Key expiration | ✅ Limits exposure | ⚠️ Rotation overhead | ⚠️ Depends on context |
| Per-client keys | ✅ Isolation | ❌ Management overhead | ✅ For consultants |
| Hardware keys (YubiKey) | ✅ Maximum security | ❌ Physical dependency | ⚠️ Enterprise only |
General principle: Use strongest security that doesn't prevent the task from being accomplished.
Use multiple keys when:
| Aspect | Personal Key | Automation Key |
|---|---|---|
| Passphrase | YES (protection) | NO (required for unattended CI/CD) |
| Storage | Local GPG keyring | GitHub/GitLab Secrets |
| Usage | Interactive development | Automated workflows only |
| Compromise risk | Affects personal commits | Affects only automation commits |
Automatic (recommended): Use Git conditional includes with directory-based switching
Manual: git config user.signingkey <KEY_ID> for specific repo
Global: git config --global user.signingkey <KEY_ID> for all repos
Yes, with caveats:
Date: 2025-11-28 Model: claude-opus-4-5-20251101
Tool Versions Tested:
All configurations validated against official documentation from gnupg.org, git-scm.com, and docs.github.com.