«go get» et GitHub : briser le mur « terminal prompts disabled »

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : quand un simple go get devient un casse-tête

\n\n

Avez-vous déjà essayé d'exécuter go get github.com/votre-compte/dépôt-privé et reçu en retour un message froid et peu amical ?

\n\n
go get github.com/votre-compte/dépôt-privé : \n  module github.com/votre-compte/dépôt-privé : \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/votre-compte/dépôt-privé.git'
\n\n

Ou, encore plus mystérieux :

\n
go get github.com/votre-compte/dépôt-privé : \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

Une situation familière ? Si oui, vous êtes au bon endroit. Cette erreur est un « obstacle classique » pour les développeurs Go travaillant avec des dépôts privés sur GitHub. Sur Stack Overflow, cette question a recueilli des milliers de vues, et aujourd'hui nous allons la résoudre une fois pour toutes.

\n\n

Dans cet article, nous ne nous contenterons pas de résoudre le problème — nous comprendrons pourquoi il se produit, et nous apprendrons à configurer l'environnement pour que go get fonctionne avec les dépôts privés comme sur des roulettes. C'est parti !

\n\n

Pourquoi Go refuse-t-il de fonctionner avec les dépôts privés ?

\n\n

Pour comprendre la cause, il faut regarder « sous le capot » de Go. Lorsque vous exécutez go get, l'outil Go fait plusieurs choses :

\n\n
    \n
  1. Il tente de cloner le dépôt via HTTPS (c'est le protocole par défaut).
  2. \n
  3. Si le dépôt est privé, Git demande une authentification (identifiant/mot de passe).
  4. \n
  5. Go, par défaut, désactive les invites interactives dans le terminal — c'est ce fameux « terminal prompts disabled ».
  6. \n
\n\n

Pourquoi Go fait-il cela ? C'est simple : lors d'une construction automatique ou dans des pipelines CI/CD, la saisie interactive du mot de passe est impossible. Go préfère donc « échouer » avec une erreur plutôt que de rester bloqué en attente de saisie.

\n\n

Idée clé : l'erreur « terminal prompts disabled » n'est pas un bug, mais une fonctionnalité. Go vous dit : « Je ne peux pas te demander ton mot de passe, donne-moi des identifiants prêts à l'emploi ». Et notre tâche est de les fournir.

\n\n

Méthode 1 : Utilisation de SSH (la plus fiable et correcte)

\n\n

C'est la méthode recommandée. Les clés SSH sont sécurisées, pratiques et ne nécessitent pas de saisir un mot de passe à chaque fois.

\n\n

Étape 1. Générer une clé SSH (si vous n'en avez pas)

\n

Ouvrez un terminal et exécutez :

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

Appuyez sur Entrée pour enregistrer la clé dans le dossier standard (~/.ssh/id_ed25519). Vous pouvez ajouter une phrase de passe — cela améliorera la sécurité.

\n\n

Étape 2. Ajouter la clé à l'agent SSH

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

Étape 3. Ajouter la clé publique sur GitHub

\n

Copiez le contenu de ~/.ssh/id_ed25519.pub :

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

Allez sur GitHub → Settings → SSH and GPG keys → New SSH key. Collez la clé et enregistrez.

\n\n

Étape 4. Configurer Git pour utiliser SSH

\n

Maintenant, le plus important : il faut forcer Go à utiliser SSH au lieu de HTTPS. Pour cela, modifiez le fichier ~/.gitconfig :

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

Cette directive dit à Git : « Quand tu vois https://github.com/ — utilise git@github.com: (SSH) ».

\n\n

Étape 5. Réessayer

\n
go get github.com/votre-compte/dépôt-privé@latest
\n

Si tout est configuré correctement — l'erreur disparaîtra. Go utilisera SSH pour l'authentification, et l'agent SSH fournira la clé.

\n\n

Méthode 2 : Utilisation d'un Personal Access Token (PAT) — pour CI/CD et scripts

\n\n

SSH est parfait pour le développement local

Blogs

Book Recommendations