Introdução: quando um simples go get vira um quebra-cabeça
\n\nVocê já tentou executar go get github.com/seu-usuario/repositorio-privado e recebeu uma mensagem fria e nada amigável?
go get github.com/seu-usuario/repositorio-privado: \n module github.com/seu-usuario/repositorio-privado: \n git ls-remote -q origin in /tmp/...: exit status 128:\n remote: Invalid username or password.\n fatal: Authentication failed for 'https://github.com/seu-usuario/repositorio-privado.git'\n\nOu, ainda mais enigmático:
\ngo get github.com/seu-usuario/repositorio-privado: \n terminal prompts disabled\n Confirm the import path was entered correctly.\n If this is a private repo, see https://golang.org/doc/faq#git_https\n\nSituação familiar? Se sim, você está no lugar certo. Esse erro é o clássico «tropeço» para desenvolvedores Go que trabalham com repositórios privados no GitHub. No Stack Overflow, essa pergunta já acumulou milhares de visualizações, e hoje vamos resolvê-la de uma vez por todas.
\n\nNeste artigo, não vamos apenas resolver o problema — vamos entender por que ele ocorre e aprender a configurar o ambiente para que o go get funcione perfeitamente com repositórios privados. Vamos nessa!
Por que o Go se recusa a trabalhar com repositórios privados?
\n\nPara entender a causa, precisamos olhar «sob o capô» do Go. Quando você executa go get, a ferramenta Go faz algumas coisas:
- \n
- Tenta clonar o repositório via HTTPS (o protocolo padrão). \n
- Se o repositório for privado, o Git solicita autenticação (login/senha). \n
- Por padrão, o Go desativa solicitações interativas no terminal — é exatamente isso que é o «terminal prompts disabled». \n
Por que o Go faz isso? Simples: em builds automáticos ou pipelines de CI/CD, a entrada interativa de senha é impossível. Portanto, o Go prefere «falhar» com um erro do que travar esperando uma entrada.
\n\nIdeia-chave: o erro «terminal prompts disabled» não é um bug, é uma funcionalidade. O Go está dizendo: «Não posso te pedir a senha, me dê as credenciais prontas». E nossa tarefa é fornecê-las.
\n\nMétodo 1: Usando SSH (o mais confiável e correto)
\n\nEste é o método recomendado. Chaves SSH são seguras, práticas e não exigem digitar senha toda vez.
\n\nPasso 1. Gerar uma chave SSH (se não tiver uma)
\nAbra o terminal e execute:
\nssh-keygen -t ed25519 -C "seu_email@example.com"\nPressione Enter para salvar a chave na pasta padrão (~/.ssh/id_ed25519). Você pode adicionar uma frase secreta para aumentar a segurança.
Passo 2. Adicionar a chave ao agente SSH
\neval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519\n\nPasso 3. Adicionar a chave pública ao GitHub
\nCopie o conteúdo de ~/.ssh/id_ed25519.pub:
cat ~/.ssh/id_ed25519.pub\nAcesse GitHub → Settings → SSH and GPG keys → New SSH key. Cole a chave e salve.
\n\nPasso 4. Configurar o Git para usar SSH
\nAgora, o mais importante: forçar o Go a usar SSH em vez de HTTPS. Edite o arquivo ~/.gitconfig:
[url "git@github.com:"]\n insteadOf = https://github.com/\nEssa diretiva diz ao Git: «Quando vir https://github.com/, use git@github.com: (SSH)».
Passo 5. Testar novamente
\ngo get github.com/seu-usuario/repositorio-privado@latest\nSe tudo estiver configurado corretamente, o erro desaparecerá. O Go usará SSH para autenticação, e o agente SSH fornecerá a chave.
\n\nMétodo 2: Usando Personal Access Token (PAT) — para CI/CD e scripts
\n\nO SSH é excelente para desenvolvimento local. Mas em ambientes CI/CD ou scripts automatizados, o Personal Access Token (PAT) do GitHub é mais prático.