Como Configurar Múltiplas Contas Git/GitHub com Chaves SSH Diferentes
Este guia mostra como configurar automaticamente diferentes credenciais Git (email e chave SSH) baseado no repositório que você está trabalhando.
📋 Cenário
Você trabalha com:
- Conta corporativa (ex: EmpresaX) com um email e chave SSH
- Conta pessoal com outro email e outra chave SSH
E quer que o Git use automaticamente as credenciais corretas sem precisar configurar manualmente em cada repositório.
🎯 Objetivo
- Repositórios de
empresax→ usar email corporativo + chave SSH corporativa - Outros repositórios → usar email pessoal + chave SSH pessoal
- Tudo automático, sem configuração manual!
📝 Pré-requisitos
- Ter duas chaves SSH diferentes criadas:
ls ~/.ssh/*.pub
Exemplo de resultado:
~/.ssh/id_ed25519.pub (chave corporativa)
~/.ssh/id_ed25519_personal.pub (chave pessoal)
- Git versão 2.36.0 ou superior (para suporte a
hasconfig)git --version
🔧 Passo 1: Criar Chaves SSH (se ainda não tiver)
Chave Corporativa
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519
Chave Pessoal
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/id_ed25519_personal
Dica: Pressione ENTER quando pedir senha (sem senha é mais prático para desenvolvimento local).
🔧 Passo 2: Configurar SSH
Edite ou crie o arquivo ~/.ssh/config:
nano ~/.ssh/config
Adicione a seguinte configuração:
# Configuração para repositórios corporativos (EmpresaX)
Host github.com-empresax
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
# Configuração padrão para outros repositórios (pessoal)
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
IdentitiesOnly yes
# Fallback para qualquer outro host SSH
Host *
AddKeysToAgent yes
UseKeychain yes # ⚠️ Específico do macOS - remova em Linux/Windows
📌 O que isso faz?
github.com-empresax→ usa a chaveid_ed25519(corporativa)github.com→ usa a chaveid_ed25519_personal(pessoal)IdentitiesOnly yes→ força usar apenas a chave especificada
🔧 Passo 3: Criar arquivo de configuração Git para conta corporativa
Crie o arquivo ~/.gitconfig-empresax:
nano ~/.gitconfig-empresax
Com o seguinte conteúdo (ajuste com seus dados):
[user]
email = [email protected]
name = Seu Nome
signingkey = /Users/seu-usuario/.ssh/id_ed25519
[url "[email protected]:empresax/"]
insteadOf = [email protected]:empresax/
insteadOf = https://github.com/empresax/
📌 O que isso faz?
- Define email, nome e chave de assinatura para conta corporativa
insteadOf→ reescreve URLs para usargithub.com-empresaxautomaticamente
🔧 Passo 4: Configurar arquivo Git principal
Edite o arquivo ~/.gitconfig:
nano ~/.gitconfig
Configure assim (ajuste com seus dados):
# ⚠️ Configuração padrão (pessoal) DEVE vir ANTES dos includeIf
[user]
email = [email protected]
name = Seu Nome
signingkey = /Users/seu-usuario/.ssh/id_ed25519_personal
# Configuração condicional para repositórios corporativos
# includeIf vem POR ÚLTIMO para sobrescrever as configurações padrão
[includeIf "hasconfig:remote.*.url:**empresax/**"]
path = ~/.gitconfig-empresax
📌 O que isso faz?
- Define configurações pessoais como padrão
includeIfcomhasconfig→ detecta se o remote contémempresax- Se detectar → inclui
~/.gitconfig-empresax(sobrescreve com config corporativa)
⚠️ IMPORTANTE: Ordem importa!
A seção [user] padrão deve vir antes dos [includeIf] para que os includes possam sobrescrever os valores.
✅ Passo 5: Adicionar chaves SSH às contas do GitHub
Conta Corporativa
- Copie a chave pública corporativa:
cat ~/.ssh/id_ed25519.pub | pbcopy
- Acesse GitHub (conta corporativa) → Settings → SSH and GPG keys → New SSH key
- Cole a chave e salve
Conta Pessoal
- Copie a chave pública pessoal:
cat ~/.ssh/id_ed25519_personal.pub | pbcopy - Acesse GitHub (conta pessoal) → Settings → SSH and GPG keys → New SSH key
- Cole a chave e salve
🔧 Passo 6: Adicionar chaves ao ssh-agent
Adicione as chaves ao ssh-agent para que sejam carregadas automaticamente:
# Adicionar chave corporativa
ssh-add ~/.ssh/id_ed25519
# Adicionar chave pessoal
ssh-add ~/.ssh/id_ed25519_personal
Criar aliases para facilitar (opcional)
Adicione ao seu ~/.zshrc ou ~/.bashrc:
# Aliases para adicionar chaves SSH
alias sshempresax="ssh-add ~/.ssh/id_ed25519"
alias sshpessoal="ssh-add ~/.ssh/id_ed25519_personal"
Depois recarregue:
source ~/.zshrc
🧪 Testando a Configuração
Teste 1: Repositório Corporativo
# Clone ou entre em um repositório corporativo
cd seu-repo-corporativo
# Verifique as configurações
git config user.email
# Deve mostrar: [email protected]
git config user.signingkey
# Deve mostrar: /Users/seu-usuario/.ssh/id_ed25519
Teste 2: Repositório Pessoal
# Clone ou entre em um repositório pessoal
cd seu-repo-pessoal
# Verifique as configurações
git config user.email
# Deve mostrar: [email protected]
git config user.signingkey
# Deve mostrar: /Users/seu-usuario/.ssh/id_ed25519_personal
Teste 3: Conexão SSH
Teste a conexão SSH com ambas as chaves:
# Teste chave corporativa
ssh -T [email protected]
# Teste chave pessoal
ssh -T [email protected]
Ambos devem retornar uma mensagem de sucesso do GitHub.
🚀 Como Usar no Dia a Dia
Clonando Repositórios
Repositórios corporativos:
git clone [email protected]:empresax/seu-repo.git
Repositórios pessoais:
git clone [email protected]:seu-usuario/seu-repo.git
Fazendo Commits
Não muda nada! O Git automaticamente usa:
- Email correto
- Chave SSH correta para assinatura
- Chave SSH correta para push/pull
git add .
git commit -m "Meu commit"
git push
🔍 Comandos Úteis para Debug
Ver qual configuração está sendo usada
# Ver de onde vem cada configuração
git config --list --show-origin | grep user
# Ver configurações do repositório atual
git config user.email
git config user.signingkey
git config --list --show-scope | grep user
Testar qual chave SSH está sendo usada
# Ver quais chaves estão carregadas
ssh-add -l
# Testar conexão com verbose
ssh -vT [email protected]
ssh -vT [email protected]
Ver logs de commits com informações de assinatura
git log --show-signature -1
🎯 Personalizando para Outros Casos
Adicionar mais organizações
No ~/.gitconfig, adicione mais includeIf:
[includeIf "hasconfig:remote.*.url:**sua-empresa/**"]
path = ~/.gitconfig-empresa
[includeIf "hasconfig:remote.*.url:**outro-org/**"]
path = ~/.gitconfig-empresa
Usar baseado em pasta ao invés de URL
Se você organiza repos por pasta, pode usar gitdir:
# Todos repos em ~/projetos/empresa/ usam config corporativa
[includeIf "gitdir:~/projetos/empresa/"]
path = ~/.gitconfig-empresa
# Todos repos em ~/projetos/pessoal/ usam config pessoal
[includeIf "gitdir:~/projetos/pessoal/"]
path = ~/.gitconfig-pessoal
❓ Troubleshooting
Problema: Email errado nos commits
Causa: Repositório foi clonado antes da configuração
Solução:
cd seu-repositorio
git config user.email [email protected]
git config user.signingkey /caminho/para/chave/correta
Problema: Chave SSH não funciona
Causa: Chave não está carregada no ssh-agent
Solução:
# Adicionar chave ao ssh-agent
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_personal
# Verificar
ssh-add -l
Problema: includeIf não funciona
Causa: Versão antiga do Git
Solução:
# Verificar versão (precisa 2.36+)
git --version
# Atualizar Git (macOS)
brew upgrade git
Problema: “Permission denied (publickey)”
Causa: Chave não foi adicionada ao GitHub
Solução:
- Copie a chave pública:
cat ~/.ssh/sua_chave.pub | pbcopy - Adicione em: https://github.com/settings/keys
Problema: Chave errada está sendo usada
Causa: Múltiplas chaves carregadas no ssh-agent
Solução:
# Limpar todas as chaves
ssh-add -D
# Adicionar apenas as chaves necessárias
ssh-add ~/.ssh/id_ed25519
ssh-add ~/.ssh/id_ed25519_personal
# Ou especificar no SSH config com IdentitiesOnly yes
📊 Resumo da Configuração
Arquivos Criados/Modificados
~/.ssh/config # Configuração SSH
~/.ssh/id_ed25519 # Chave privada corporativa
~/.ssh/id_ed25519.pub # Chave pública corporativa
~/.ssh/id_ed25519_personal # Chave privada pessoal
~/.ssh/id_ed25519_personal.pub # Chave pública pessoal
~/.gitconfig # Configuração Git principal
~/.gitconfig-empresax # Configuração Git corporativa
Fluxo de Decisão
┌─────────────────────────┐
│ Clone/Push Repository │
└───────────┬─────────────┘
│
▼
┌───────────────┐
│ Check Remote │
│ URL │
└───────┬───────┘
│
┌──────┴──────┐
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ Contains│ │ Other │
│empresax │ │ repos │
└────┬────┘ └────┬────┘
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│Corporate│ │Personal │
│ Config │ │ Config │
│ │ │ │
│ email@ │ │email@ │
│empresa │ │gmail │
│ │ │ │
│id_ed │ │id_ed25 │
│25519 │ │519_pers │
└─────────┘ └─────────┘
📚 Referências
- Git Config Documentation
- SSH Config Documentation
- GitHub: Multiple SSH Keys
- Git Conditional Includes
💡 Dicas Extras
1. Verificar configuração antes de commitar
Crie um alias Git para verificar rapidamente qual conta está sendo usada:
git config --global alias.whoami '!echo "Email: $(git config user.email)" && echo "Key: $(git config user.signingkey)"'
Use antes de commitar:
git whoami
2. Aliases úteis no shell
Adicione ao ~/.zshrc ou ~/.bashrc:
# Aliases SSH
alias sshempresax="ssh-add ~/.ssh/id_ed25519"
alias sshpessoal="ssh-add ~/.ssh/id_ed25519_personal"
alias sshlist="ssh-add -l"
alias sshclear="ssh-add -D"
# Alias Git
alias gitinfo="git config user.email && git config user.signingkey"
alias gitkeys="ssh-add -l | grep -E 'gmail|empresa'"
3. Assinatura automática de commits
A configuração commit.gpgsign = true garante que todos os commits sejam assinados automaticamente com a chave SSH configurada.
Para verificar se um commit está assinado:
git log --show-signature -1
✅ Checklist Final
Antes de começar a usar, verifique se tudo está configurado:
- Duas chaves SSH criadas (
id_ed25519eid_ed25519_personal) - Chaves adicionadas às respectivas contas do GitHub
- Arquivo
~/.ssh/configconfigurado - Arquivo
~/.gitconfig-empresaxcriado - Arquivo
~/.gitconfigatualizado comincludeIf - Chaves adicionadas ao ssh-agent
- Testado conexão SSH:
ssh -T [email protected]essh -T [email protected] - Testado em repositório corporativo:
git config user.email - Testado em repositório pessoal:
git config user.email - Aliases criados no
~/.zshrc(opcional)
Pronto! 🎉 Agora você tem uma configuração profissional que gerencia automaticamente múltiplas contas Git!
🤝 Contribuindo
Encontrou algum erro ou tem sugestões? Sinta-se à vontade para contribuir!