Introduction : quand un simple go get devient un casse-tête
\n\nAvez-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 ?
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\nOu, encore plus mystérieux :
\ngo 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\nUne 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\nDans 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 !
Pourquoi Go refuse-t-il de fonctionner avec les dépôts privés ?
\n\nPour comprendre la cause, il faut regarder « sous le capot » de Go. Lorsque vous exécutez go get, l'outil Go fait plusieurs choses :
- \n
- Il tente de cloner le dépôt via HTTPS (c'est le protocole par défaut). \n
- Si le dépôt est privé, Git demande une authentification (identifiant/mot de passe). \n
- Go, par défaut, désactive les invites interactives dans le terminal — c'est ce fameux « terminal prompts disabled ». \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\nIdé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\nMéthode 1 : Utilisation de SSH (la plus fiable et correcte)
\n\nC'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)
\nOuvrez un terminal et exécutez :
\nssh-keygen -t ed25519 -C "votre_email@example.com"\nAppuyez 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é.
Étape 2. Ajouter la clé à l'agent SSH
\neval "$(ssh-agent -s)"\nssh-add ~/.ssh/id_ed25519\n\nÉtape 3. Ajouter la clé publique sur GitHub
\nCopiez le contenu de ~/.ssh/id_ed25519.pub :
cat ~/.ssh/id_ed25519.pub\nAllez sur GitHub → Settings → SSH and GPG keys → New SSH key. Collez la clé et enregistrez.
\n\nÉtape 4. Configurer Git pour utiliser SSH
\nMaintenant, le plus important : il faut forcer Go à utiliser SSH au lieu de HTTPS. Pour cela, modifiez le fichier ~/.gitconfig :
[url "git@github.com:"]\n insteadOf = https://github.com/\nCette directive dit à Git : « Quand tu vois https://github.com/ — utilise git@github.com: (SSH) ».
Étape 5. Réessayer
\ngo get github.com/votre-compte/dépôt-privé@latest\nSi tout est configuré correctement — l'erreur disparaîtra. Go utilisera SSH pour l'authentification, et l'agent SSH fournira la clé.
\n\nMéthode 2 : Utilisation d'un Personal Access Token (PAT) — pour CI/CD et scripts
\n\nSSH est parfait pour le développement local