Skip to main content

Problembehandlung bei der Authentifizierung in einem Repository

Hier erfährst du, wie du häufige Authentifizierungsprobleme beim Klonen, Pushen oder Pullen eines Repositorys in einem Codespace behebst.

Wenn du einen Codespace für ein Repository erstellst, kannst du im Allgemeinen git pull und git push verwenden, um Änderungen ohne zusätzliche Authentifizierung zu pullen und zu pushen. Gelegentlich können jedoch Authentifizierungsfehler auftreten, wenn du versuchst, diese Vorgänge auszuführen.

Möglicherweise erhältst du auch Fehler, wenn du versuchst, mit einem anderen Repository als dem zu interagieren, aus dem du den Codespace erstellt hast.

Authentifizieren bei dem Repository, aus dem du den Codespace erstellt hast

Wenn du versuchst, in das Repository zu pushen oder aus dem Repository zu pullen, aus dem du den Codespace erstellt hast, aber die Authentifizierung nicht erfolgreich ist, wird möglicherweise ein Fehler wie git@github.com: Permission denied (publickey) oder Host key verification failed angezeigt.

Diese Fehler werden möglicherweise angezeigt, wenn du ein Dotfiles-Repository mit GitHub Codespaces verwendest und in Git ein anderes Protokoll als HTTPS für die Übertragung von Daten an das Remoterepository konfiguriert hast. Möglicherweise hast du Git für die Verwendung von SSH konfiguriert, indem du Zeilen wie die folgenden in eine Konfigurationsdatei in deine Dotfiles eingefügt hast.

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

GitHub Codespaces verwendet standardmäßig das HTTPS-Protokoll und authentifiziert sich mit einem GITHUB_TOKEN, das mit Lese- und Schreibzugriff konfiguriert ist, bei dem Repository, aus dem du den Codespace erstellt hast. Es wird empfohlen, das Standardprotokoll HTTPS und GITHUB_TOKEN in deinem Codespace zu verwenden. Die GITHUB_TOKEN-Berechtigungen sind gemäß dem Sicherheitsprinzip der geringsten Rechte üblicherweise auf nur ein Repository begrenzt. Bei der SSH-Authentifizierung sind Repositoryberechtigungen nicht differenziert, sodass eine versehentliche Offenlegung deines SSH-Schlüssels jemandem Zugriff auf all deine Repositorys gewähren kann.

Um das HTTPS-Standardprotokoll zu verwenden, entferne die Konfiguration aus deinen Dotfiles, die den Konflikt verursacht. Wenn dein Dotfiles-Repository ein Installationsskript in einer bekannten Datei wie install.sh enthält, kannst Logik ähnlich der folgenden verwenden, um die Konfiguration in Codespaces auszuschließen.

if [ -z "$CODESPACES" ]; then
  git config --global url."git@github.com".insteadOf "https://github.com"
fi

Arbeitest du in einem Codespace, der aus einem Repository erstellt wurde, dem du vertraust, und musst SSH verwenden? Dann stelle sicher, dass dein Codespace für die Authentifizierung mit einem SSH-Schlüssel eingerichtet ist, der mit deinem GitHub-Konto verknüpft ist. Weitere Informationen finden Sie unter Generieren eines neuen SSH-Schlüssels und Hinzufügen des Schlüssels zum ssh-agent.

Authentifizieren bei Repositorys, aus denen du den Codespace nicht erstellt hast

Das GITHUB_TOKEN in einem Codespace ist mit Lese- und Schreibzugriff auf das Repository konfiguriert, aus dem du den Codespace erstellt hast. Standardmäßig hat das Token keinen Zugriff auf andere Repositorys. Möglicherweise stellst du fest, dass du ein Repository nicht klonen kannst oder keinen Push in ein Repository ausführen kannst, das du geklont hast.

Es wird nicht empfohlen, den Wert für das GITHUB_TOKEN in einem Codespace manuell zu aktualisieren. Wenn dein Projekt Zugriff auf andere Repositorys erfordert, kannst du Codespaces Zugriff auf diese Repositorys geben, indem du in der Konfiguration deines Entwicklungscontainers zusätzliche Berechtigungen auflistest. Dadurch können Benutzer*innen die zusätzlichen Berechtigungen autorisieren, wenn sie einen Codespace erstellen. Die Berechtigungen eines vorhandenen Codespaces werden jedoch nicht geändert. Weitere Informationen finden Sie unter Verwalten des Zugriffs auf andere Repositorys innerhalb deines Codespace.

Wenn du Zugriff auf ein anderes Repository in einem vorhandenen Codespace benötigst oder die erforderlichen Berechtigungen für dich spezifisch sind und nicht für andere Mitwirkende gelten, kannst du ein personal access token mit Zugriff auf das Repository erstellen und das Token deinem Codespace hinzufügen. Es wird empfohlen, den Zugriff auf das Token einzuschränken, indem du ein fine-grained personal access token verwendest. Wähle dabei nur die Repositorys, auf die Zugriff erforderlich ist, und gewähre den erforderlichen Zugriff nur für die Berechtigung für den Inhalt. Weitere Informationen finden Sie unter Verwalten deiner persönlichen Zugriffstoken.

Sie können das Token als Umgebungsvariable in einem Codespace oder als Geheimnis für GitHub Codespaces hinzufügen. Wenn Sie ein Geheimnis erstellen, sollten Sie nur bestimmten vertrauenswürdigen Repositorys den Zugriff auf das Geheimnis erlauben. Wenn Sie ein neues Geheimnis hinzufügen, werden Sie aufgefordert, ihren bestehenden Codespace neu zu laden, um das neue Geheimnis zu pullen. Weitere Informationen finden Sie unter Verwalten deiner kontospezifischen Geheimnisse für GitHub Codespaces.

Zur Verwendung des Tokens für die Authentifizierung in deinem Codespace hast du folgende Optionen.

  • Wenn Sie die Umgebungsvariable oder das Geheimnis erstellen, können Sie den Namen GH_TOKEN verwenden. Die GH_TOKEN-Variable wird in GitHub CLI-Vorgängen standardmäßig verwendet, sodass du das Repository mit dem Befehl gh repo clone OWNER/REPO klonen kannst.

    Wenn du jedoch versuchst, mithilfe von git push in das Repository zu pushen, versucht das Git-Hilfsprogramm für Anmeldeinformationen, das vorhandene GITHUB_TOKEN zur Authentifizierung zu verwenden, und die Authentifizierung ist nicht erfolgreich. Du kannst das Hilfsprogramm überschreiben, aber das kann bei Interaktionen mit dem ursprünglichen Repository, aus dem du den Codespace erstellt hast, zu Störungen führen.

  • Du kannst das Repository mit einer URL klonen, die das Zugriffstoken enthält. Ersetzen Sie es YOUR-VARIABLE mit dem Namen der Umgebungsvariablen oder dem Geheimnis, das Sie erstellt haben.

    git clone https://PAT:$YOUR-VARIABLE@github.com/OWNER/REPO`
    

    Dadurch wird das Zugriffstoken für dieses Repository gespeichert, sodass du in dieses Repository pushen und daraus pullen kannst, ohne das vorhandene Hilfsprogramm für Anmeldeinformationen zu überschreiben.

    Hinweis: Wenn du auf diese Weise klonst, ist das Token in deiner Git-Konfiguration sichtbar. Du solltest diese Methode nur verwenden, wenn du in einem Codespace arbeitest, der aus einem Repository erstellt wurde, dem du vertraust, und du solltest den Gültigkeitsbereich des Zugriffstokens so weit wie möglich einschränken.