«go get» und GitHub: Die Mauer «terminal prompts disabled» einreißen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Wenn ein einfaches go get zum Geduldsspiel wird

\n\n

Haben Sie jemals versucht, go get github.com/ihr-account/privates-repository auszuführen und als Antwort eine kalte, unfreundliche Nachricht erhalten?

\n\n
go get github.com/ihr-account/privates-repository: \n  module github.com/ihr-account/privates-repository: \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/ihr-account/privates-repository.git'
\n\n

Oder, noch rätselhafter:

\n
go get github.com/ihr-account/privates-repository: \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

Kommt Ihnen das bekannt vor? Wenn ja, sind Sie hier genau richtig. Dieser Fehler ist ein klassischer «Stolperstein» für Go-Entwickler, die mit privaten Repositorys auf GitHub arbeiten. Auf Stack Overflow wurde diese Frage tausende Male aufgerufen, und heute werden wir sie ein für alle Mal klären.

\n\n

In diesem Artikel werden wir das Problem nicht nur lösen – wir werden verstehen, warum es auftritt, und lernen, die Umgebung so einzurichten, dass go get mit privaten Repositorys wie geschmiert funktioniert. Los geht's!

\n\n

Warum verweigert Go die Arbeit mit privaten Repositorys?

\n\n

Um den Grund zu verstehen, müssen wir unter die «Motorhaube» von Go schauen. Wenn Sie go get ausführen, macht das Go-Tool mehrere Dinge:

\n\n
    \n
  1. Es versucht, das Repository über HTTPS zu klonen (das ist das Standardprotokoll).
  2. \n
  3. Wenn das Repository privat ist, fordert Git eine Authentifizierung an (Benutzername/Passwort).
  4. \n
  5. Go deaktiviert standardmäßig interaktive Terminalabfragen – das ist das besagte «terminal prompts disabled».
  6. \n
\n\n

Warum macht Go das? Ganz einfach: Bei automatischen Builds oder in CI/CD-Pipelines ist eine interaktive Passworteingabe nicht möglich. Daher stürzt Go lieber mit einem Fehler ab, als auf eine Eingabe zu warten.

\n\n

Kernidee: Der Fehler «terminal prompts disabled» ist kein Bug, sondern ein Feature. Go sagt Ihnen: «Ich kann dich nicht nach deinem Passwort fragen, gib mir fertige Anmeldedaten». Und unsere Aufgabe ist es, diese bereitzustellen.

\n\n

Methode 1: Verwendung von SSH (die zuverlässigste und korrekteste)

\n\n

Dies ist die empfohlene Methode. SSH-Schlüssel sind sicher, bequem und erfordern keine erneute Passworteingabe.

\n\n

Schritt 1. SSH-Schlüssel generieren (falls nicht vorhanden)

\n

Öffnen Sie ein Terminal und führen Sie Folgendes aus:

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

Drücken Sie die Eingabetaste, um den Schlüssel im Standardordner zu speichern (~/.ssh/id_ed25519). Sie können eine Passphrase hinzufügen – das erhöht die Sicherheit.

\n\n

Schritt 2. Schlüssel zum SSH-Agenten hinzufügen

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

Schritt 3. Öffentlichen Schlüssel zu GitHub hinzufügen

\n

Kopieren Sie den Inhalt von ~/.ssh/id_ed25519.pub:

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

Gehen Sie zu GitHub → Einstellungen → SSH- und GPG-Schlüssel → Neuer SSH-Schlüssel. Fügen Sie den Schlüssel ein und speichern Sie ihn.

\n\n

Schritt 4. Git für die Verwendung von SSH konfigurieren

\n

Jetzt kommt der wichtigste Teil: Sie müssen Go dazu bringen, SSH anstelle von HTTPS zu verwenden. Bearbeiten Sie dazu die Datei ~/.gitconfig:

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

Diese Direktive sagt Git: «Wenn du https://github.com/ siehst, verwende git@github.com: (SSH)».

\n\n

Schritt 5. Erneuter Versuch

\n
go get github.com/ihr-account/privates-repository@latest
\n

Wenn alles richtig konfiguriert ist, verschwindet der Fehler. Go verwendet SSH zur Authentifizierung und der SSH-Agent stellt den Schlüssel bereit.

\n\n

Methode 2: Verwendung eines Personal Access Token (PAT) – für CI/CD und Skripte

\n\n

SSH eignet sich hervorragend für die lokale Entwicklung

Blogs

Buchempfehlungen