«go get» e GitHub: resolvendo o erro «terminal prompts disabled»

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: quando um simples go get vira um quebra-cabeça

\n\n

Você já tentou executar go get github.com/seu-usuario/repositorio-privado e recebeu uma mensagem fria e nada amigável?

\n\n
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\n

Ou, ainda mais enigmático:

\n
go 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\n

Situaçã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\n

Neste 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!

\n\n

Por que o Go se recusa a trabalhar com repositórios privados?

\n\n

Para entender a causa, precisamos olhar «sob o capô» do Go. Quando você executa go get, a ferramenta Go faz algumas coisas:

\n\n
    \n
  1. Tenta clonar o repositório via HTTPS (o protocolo padrão).
  2. \n
  3. Se o repositório for privado, o Git solicita autenticação (login/senha).
  4. \n
  5. Por padrão, o Go desativa solicitações interativas no terminal — é exatamente isso que é o «terminal prompts disabled».
  6. \n
\n\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\n

Ideia-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\n

Método 1: Usando SSH (o mais confiável e correto)

\n\n

Este é o método recomendado. Chaves SSH são seguras, práticas e não exigem digitar senha toda vez.

\n\n

Passo 1. Gerar uma chave SSH (se não tiver uma)

\n

Abra o terminal e execute:

\n
ssh-keygen -t ed25519 -C "seu_email@example.com"
\n

Pressione Enter para salvar a chave na pasta padrão (~/.ssh/id_ed25519). Você pode adicionar uma frase secreta para aumentar a segurança.

\n\n

Passo 2. Adicionar a chave ao agente SSH

\n
eval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519
\n\n

Passo 3. Adicionar a chave pública ao GitHub

\n

Copie o conteúdo de ~/.ssh/id_ed25519.pub:

\n
cat ~/.ssh/id_ed25519.pub
\n

Acesse GitHub → Settings → SSH and GPG keys → New SSH key. Cole a chave e salve.

\n\n

Passo 4. Configurar o Git para usar SSH

\n

Agora, o mais importante: forçar o Go a usar SSH em vez de HTTPS. Edite o arquivo ~/.gitconfig:

\n
[url "git@github.com:"]\n    insteadOf = https://github.com/
\n

Essa diretiva diz ao Git: «Quando vir https://github.com/, use git@github.com: (SSH)».

\n\n

Passo 5. Testar novamente

\n
go get github.com/seu-usuario/repositorio-privado@latest
\n

Se tudo estiver configurado corretamente, o erro desaparecerá. O Go usará SSH para autenticação, e o agente SSH fornecerá a chave.

\n\n

Método 2: Usando Personal Access Token (PAT) — para CI/CD e scripts

\n\n

O SSH é excelente para desenvolvimento local. Mas em ambientes CI/CD ou scripts automatizados, o Personal Access Token (PAT) do GitHub é mais prático.

Blogs

Book Recommendations