Advanced GPG multi-key management strategies for consultants, CI/CD automation, and enterprise teams. Configure, set up, run, and execute multi-key GPG workflows...
Advanced 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.