Trabalhar com mais de uma conta no GitHub é algo bastante comum.
Por exemplo:

  • uma conta pessoal
  • uma conta corporativa
  • contas usadas em organizações específicas

Sem uma configuração adequada, o Git pode acabar utilizando a chave SSH ou o usuário errado, gerando erros de autenticação ou registrando commits com o e-mail incorreto.

Este guia mostra como configurar múltiplas identidades SSH para acessar diferentes contas no GitHub utilizando:

  • chaves SSH separadas
  • aliases no arquivo ~/.ssh/config
  • configurações específicas em cada repositório

O problema

Quando utilizamos SSH para acessar o GitHub, o cliente SSH normalmente usa uma única chave padrão localizada em:

~/.ssh/id_rsa
~/.ssh/id_ed25519

Isso funciona bem quando existe apenas uma conta GitHub.

Mas quando trabalhamos com múltiplas contas, surgem alguns problemas comuns:

  • commits realizados com e-mail incorreto
  • erro Permission denied (publickey)
  • acesso negado a repositórios privados
  • pushes sendo enviados para a conta errada

A solução é configurar uma identidade SSH diferente para cada conta.


Fluxo de autenticação SSH

flowchart LR
Dev[Desenvolvedor] --> Git
Git --> SSH
SSH --> Config[~/.ssh/config]
Config --> Alias[Host alias]
Alias --> Key[Chave SSH específica]
Key --> GitHub[Conta GitHub correta]

Cada alias definido no ~/.ssh/config aponta para uma chave SSH específica, permitindo separar as identidades.


1. Gerar a chave SSH

Recomenda-se utilizar ED25519, que é o algoritmo moderno padrão.

ssh-keygen -t ed25519 -C "usuario@empresa.com" -f ~/.ssh/github-empresa

Serão criados dois arquivos:

Chave privada

~/.ssh/github-empresa

Chave pública

~/.ssh/github-empresa.pub

A chave privada deve permanecer protegida e nunca deve ser compartilhada.


2. Adicionar a chave pública ao GitHub

Acesse:

https://github.com/settings/keys

Clique em New SSH key.

Copie o conteúdo do arquivo:

~/.ssh/github-empresa.pub

Cole no campo Key.

Defina um nome para identificar a máquina, por exemplo:

Notebook Linux - Empresa

3. Configurar o arquivo ~/.ssh/config

Abra o arquivo:

nano ~/.ssh/config

Adicione uma entrada:

Host github-empresa
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-empresa

4. Configurar o repositório local

Dentro do repositório:

git remote set-url origin git@github-empresa:organizacao/repositorio.git

Ou edite diretamente o .git/config:

[remote "origin"]
  url = git@github-empresa:organizacao/repositorio.git
  fetch = +refs/heads/*:refs/remotes/origin/*

5. Configurar nome e e-mail apenas para este repositório

git config user.name "Seu Nome"
git config user.email "usuario@empresa.com"

Verificar:

git config --list --local

6. Testar a conexão SSH

ssh -T git@github-empresa

Saída esperada:

Hi usuario! You've successfully authenticated, but GitHub does not provide shell access.

7. Trabalhando com múltiplas contas

Exemplo de ~/.ssh/config:

Host github-pessoal
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-pessoal

Host github-empresa
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-empresa

Cada repositório deve utilizar o alias correspondente.


8. ED25519 vs RSA

CaracterísticaRSA 4096ED25519
Tipo de criptografiaRSA clássicoCurvas elípticas modernas
Tamanho da chave4096 bits256 bits
PerformanceMais lentoMais rápido
Tamanho do arquivoMaiorMenor
CompatibilidadeMuito altaOpenSSH 6.5+
SegurançaBoaExcelente

Para ambientes modernos, ED25519 é a melhor escolha.


Problemas comuns

Permission denied (publickey)

Permission denied (publickey)

Verifique:

  • alias correto no ~/.ssh/config
  • chave adicionada ao GitHub
  • URL do repositório usando o alias correto

Teste:

ssh -T git@github-empresa

Ver qual chave SSH está sendo usada

ssh -vT git@github-empresa

Listar chaves carregadas no ssh-agent

ssh-add -l

Adicionar manualmente se necessário:

ssh-add ~/.ssh/github-empresa

Resumo rápido

EtapaComando
Gerar chavessh-keygen -t ed25519 -C "email"
Adicionar no GitHubhttps://github.com/settings/keys
Configurar aliaseditar ~/.ssh/config
Ajustar remotogit remote set-url origin git@alias:user/repo.git
Configurar usuário localgit config user.name
Testar conexãossh -T git@alias

💡 Dica: manter as chaves organizadas e nomeadas por conta (github-pessoal, github-empresa) facilita muito a manutenção quando se trabalha com vários repositórios.