How to Set Up Multiple SSH Keys for GitHub on MacBook
· 2 min read ·
· Macbook GitHub SSH Setup
Today I thought to document how to manage multiple GitHub accounts with different SSH keys on my MacBook. I have two accounts - accountA and accountB - and needed a way to switch between them seamlessly without conflicts.
Note: I’ve been using this setup for 10+ years; but everytime I go lost on the setup
What I Assumed:
- You’re using a macOS (MacBook) environment
- You have Homebrew installed (for ssh-copy-id)
- You’re comfortable with the terminal
- You have two separate GitHub accounts (accountA and accountB)
- You want to use SSH authentication for both accounts
- You’re using bash or zsh shell (not fish, though I’ll include fish-specific notes)
The Solution: Step-by-Step Guide
Step 1: Generate Separate SSH Keys
First, generate unique SSH keys for each account:
# For accountA
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_accountA
# For accountB
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_accountB
When prompted, you can set passphrases or leave them empty for convenience.
Step 2: Start SSH Agent
eval "$(ssh-agent -s)"
## For fish shell
ssh-agent -c
Step 3: Add Keys to SSH Agent
ssh-add -K ~/.ssh/id_ed25519_accountA
ssh-add -K ~/.ssh/id_ed25519_accountB
Step 4: Configure SSH Config File
Create or edit ~/.ssh/config:
vim ~/.ssh/config
Add this configuration:
# accountA configuration
Host github.com-accountA
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_accountA
IdentitiesOnly yes
# accountB configuration
Host github.com-accountB
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_accountB
IdentitiesOnly yes
Step 5: Add SSH Keys to GitHub
Copy each public key and add to respective GitHub accounts:
# Copy accountA key
pbcopy < ~/.ssh/id_ed25519_accountA.pub
# Go to GitHub accountA → Settings → SSH and GPG keys → Add new
# Copy accountB key
pbcopy < ~/.ssh/id_ed25519_accountB.pub
# Go to GitHub accountB → Settings → SSH and GPG keys → Add new
Step 6: Clone Repositories with Correct URLs
# For accountA repositories
git clone [email protected]:accountA/your-repo.git
# For accountB repositories
git clone [email protected]:accountB/your-repo.git
Step 7: Configure Git per Repository
# In accountA's repository
git config user.name "Account A"
git config user.email "[email protected]"
# In accountB's repository
git config user.name "Account B"
git config user.email "[email protected]"
Testing Your Setup
# Test accountA connection
ssh -T [email protected]
# Test accountB connection
ssh -T [email protected]
What I Learned
- SSH config allows you to specify different identities for different hosts
IdentitiesOnly yesprevents SSH from trying other keys- Each repository needs its own Git user configuration
- The naming convention (github.com-accountA) makes it clear which account you’re using
This setup has been working perfectly for me, allowing seamless switching between my two GitHub accounts without any conflicts!
Additional Tips
- You can add more accounts by following the same pattern
- Consider using
~/.ssh/configaliases for commonly used hosts - Keep your SSH keys secure and consider using passphrases for added security