🔐 Solução Definitiva para Autenticação SSH no GitHub
- #GitHub
- #Git
- #GitHub Copilot
Introdução:
Se você já trabalhou com múltiplas contas no GitHub (pessoal e profissional, por exemplo) ou se deparou com o frustrante erro Permission denied (publickey)
, sabe o quão demorado pode ser resolver o problema de autenticação. A confusão entre o protocolo HTTPS e o gerenciador de credenciais do Windows frequentemente leva a falhas.
A solução mais robusta é migrar para o protocolo SSH e garantir que o seu sistema use a chave correta para a conta certa.
Este artigo é um resumo prático de um processo de depuração real que resolveu falhas de autenticação em múltiplas etapas.
🔑 4 Passos para Resolver Conflitos de Autenticação SSH no GitHub
O erro Permission denied (publickey)
significa que seu sistema está enviando uma chave que o GitHub não reconhece ou que está bloqueada.
Passo 1: Iniciar e Limpar o Agente SSH
O ssh-agent
armazena suas chaves privadas desbloqueadas para que você não precise digitar a passphrase a cada operação.
- Inicie o Agente (no Git Bash):
- Bash
eval "$(ssh-agent -s)"
- (Retorno esperado:
Agent pid <número>
) - Limpe Chaves Antigas: É crucial garantir que o agente não esteja usando chaves antigas ou bloqueadas (que podem ter passphrase incorreta).
- Bash
ssh-add -D
- (Retorno esperado:
All identities removed.
)
Passo 2: Localizar e Adicionar a Chave Correta
Sua chave privada precisa estar carregada no ssh-agent
.
- Liste as Chaves Existentes (no Git Bash): Confirme o nome exato do arquivo da chave privada que você criou e cadastrou no GitHub (sem a extensão
.pub
). - Bash
ls -al ~/.ssh
- Dica: Procure por arquivos como
id_rsa
,id_ed25519
, ou o nome que você usou, comoid_ed25519_ary_leal_new
. - Adicione a Chave Correta: Substitua
NOME_DA_CHAVE
pelo nome do arquivo que você encontrou: - Bash
ssh-add ~/.ssh/NOME_DA_CHAVE
- Se a chave tiver uma passphrase, você precisará digitá-la corretamente. Caso contrário, considere gerar uma nova chave sem passphrase para eliminar o obstáculo (veja a seção "Solução para Passphrase Perdida" abaixo).
Passo 3: Corrigir o Arquivo de Configuração SSH (~/.ssh/config
)
Este é o ponto de falha mais comum. O Git pode estar instruído a usar um arquivo de chave incorreto.
- Visualize o Conteúdo:
- Bash
cat ~/.ssh/config
- Edite e Corrija o
IdentityFile
: Abra o arquivo (notepad ~/.ssh/config
) e garanta que a linhaIdentityFile
aponte para o caminho e nome de arquivo CORRETO da chave carregada no Passo 2. - Exemplo de configuração correta:
- Snippet de código
Host github.com
HostName github.com
User git
IdentityFile C:\Users\SEU_USUARIO\.ssh\id_ed25519_ary_leal_new
IdentitiesOnly yes
Passo 4: Testar e Fazer o Push Final
Com o agente limpo e a configuração corrigida, faça o teste de conexão.
- Teste a Conexão SSH (Autenticação):
- Bash
ssh -T git@github.com
- Sucesso: Se a sua chave estiver cadastrada no GitHub, você verá:
Hi <Seu_Usuário>! You've successfully authenticated...
- Faça o Push: Navegue até o seu projeto e faça o push.
- Bash
cd /c/caminho/do/projeto
git push --set-upstream origin main
- Se a autenticação funcionar, suas alterações serão enviadas, e a branch será configurada.
🛠️ Solução para Passphrase
Perdida ou Chave Inválida
Se a sua chave estiver bloqueada (erro Bad passphrase
) ou se o GitHub rejeitar a chave por formato (Key is invalid
), a melhor solução é gerar uma nova.
- Gere a Nova Chave (sem passphrase para evitar problemas futuros):
- Bash
ssh-keygen -t ed25519 -C "nome-da-chave-nova" -f ~/.ssh/id_ed25519_nome_novo
# Deixe a passphrase em branco (pressione Enter duas vezes)
- Copie a Chave Pública e Cole no GitHub (Manualmente):
- Exiba a chave no terminal:
cat ~/.ssh/id_ed25519_nome_novo.pub
- Copie o texto inteiro manualmente (do
ssh-ed25519
até o comentário final). - Vá para GitHub (Conta Correta!) > Settings > SSH and GPG keys e cole o conteúdo no campo "Key".
- Continue a partir do Passo 1, usando o nome da nova chave.
🌐 Gerenciamento de Múltiplas Contas (Próxima Etapa)
Para evitar conflitos futuros entre contas (ex: Ary-Leal
e yostto-leal
), use a técnica de Aliases SSH.
- Crie uma chave separada para a segunda conta.
- Adicione um Host Alias no seu
~/.ssh/config
: - Snippet de código
Host github-yostto # Novo Alias
HostName github.com
User git
IdentityFile C:\Users\SEU_USUARIO\.ssh\id_ed25519_yostto_leal # Nova Chave
IdentitiesOnly yes
- Ao clonar repositórios da segunda conta, use o alias na URL:
git clone git@github-yostto:yostto-leal/projeto.git
Parabéns por dominar o SSH! Essa é uma habilidade essencial que garante um fluxo de trabalho seguro e livre de conflitos.
#Git #GitHub #SSH #DevOps #Programação #Autenticação