Die Git-Authentifizierung schlägt nach dem Aktivieren von 2FA fehl


97

Ich habe gerade 2FA aktiviert (mir fallen keine weiteren Änderungen ein) und git hat nach meinem Benutzernamen und Passwort gefragt. Ich habe beide zur Verfügung gestellt, aber sie waren "falsch". Ich habe hier viele der Lösungen ausprobiert: Git Push erfordert Benutzername und Passwort, aber das hat nicht funktioniert. Insbesondere beim Wechsel von https zu ssh gibt der ssh-Schlüssel

Berechtigung verweigert (publickey). fatal: Konnte nicht aus dem Remote-Repository lesen.

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://mlbileschi@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

Irgendwelche Tipps?


1
"Berechtigung verweigert (publickey). Schwerwiegend: Konnte nicht aus dem Remote-Repository lesen." ist ein separates Problem, das durch Einrichten eines SSH-Schlüssels für Ihr Konto gelöst werden kann: help.github.com/articles/…
Ajedi32

1
Oft ist dies kein 2FA-Problem, sondern wird durch einen Wechsel von https zu git
SCBuergel.eth

Antworten:


125

Sie müssen ein Zugriffstoken generieren. Sie können eine erstellen, indem Sie auf Ihre Einstellungsseite gehen .

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie dieses Zugriffstoken als Kennwort in der Befehlszeile.


hm, ich habe das versucht, nachdem ich die URL auf https gesetzt hatte, und es hat nicht funktioniert. Ich habe auch versucht, die URL auf ssh zurückzusetzen und den Eintrag .ssh / unknown_hosts zu entfernen, aber ohne Erfolg.
Max Bileschi

Können Sie die Befehlszeilenausgabe zu Ihrer Frage hinzufügen? Einschließlich der Befehle, die Sie ausführen.
Gergo Erdosi

Die Ausgabe wurde hinzugefügt
Max Bileschi

Ich hatte ein seltsames Problem, bei dem ich einen Klon starten und mein neues Zugriffstoken eingeben musste. Danach (ohne darauf zu warten, dass der Klon fertig ist) konnte ich mein neues Zugriffstoken meinem ursprünglichen Verzeichnis zuweisen, in dem ich es ausführen wollte git pull. Wahrscheinlich ein lokales Problem, aber dies könnte jemandem helfen.
SG

Ich bekomme, The requested URL returned error: 403wenn ich das Token für Passwort verwende, für einen Push-Over über https
Stelios

37

Eine End-to-End-Lösung besteht aus 3 Schritten.

  1. Ein großes Lob an Gergo Erdosi. Seine Antwort ist weitgehend richtig, es ist nur so, dass Github diese Einstellungsseite ändert. Ab Ende 2016 müssen Sie ein Zugriffstoken von Ihrer Seite " Persönliche Zugriffstoken" generieren .

    Geben Sie hier die Bildbeschreibung ein

    Verwenden Sie dieses Zugriffstoken als Kennwort in der Befehlszeile.

  2. Sie können Ihren Benutzernamen beibehalten, indem Sie ihn in die Remote-URL Ihres Projekts aufnehmen. Eine Möglichkeit besteht darin, Ihre .git/configzu bearbeiten , um die urlZeile in das folgende Format zu ändern :

    url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git

  3. Sie können Ihr Passwort beibehalten, indem Sie dies nur einmal ausführen:

    $ git config credential.helper store

    und dann werden Ihre zukünftigen Git-Passwörter in ~ / .git-Anmeldeinformationen im Klartext im Format gespeichert https://user:PlaintextPassword@example.com.

    Das Speichern von Passwörtern im Klartext wird normalerweise als Sicherheitsrisiko angesehen. In diesem 2FA-Fall ist der Berechtigungsnachweis jedoch NICHT Ihr echtes Kennwort, sondern eine zufällig generierte Zeichenfolge. Es ist also so sicher wie die Verwendung eines privaten SSH- Schlüssels , eines passphrasenlosen privaten SSH-Schlüssels. CAVEAT: Denken Sie daran, dass, wenn Sie auf diesem Computer auch andere Git-Konten ohne 2FA verwenden, diese echten Passwörter auch im Klartext gespeichert werden.

PS: Alternativ können Sie die ssh-basierte Anmeldung mit einem passphrasengeschützten privaten ssh-Schlüssel verwenden. Dies wäre sicherer und weniger bequem, liegt jedoch außerhalb des Bereichs dieser Antwort.


1
Dies funktionierte für mich und ermöglichte es mir, nicht jedes Mal un und pw eingeben zu müssen, wenn ich mit git interagiere. Ich benutze Windows mit Cygwin und konnte die SSH-Schlüssel nie zum Laufen bringen - das tut es!
Liltitus27

über den letzten Absatz: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- es ist überhaupt nicht wahr . SSH-Schlüssel können einfach durch eine sofort einsatzbereite Passphrase geschützt werden . Einfach ~./git-credentials- ist überhaupt nicht gesichert!
Maxkoryukov

Darüber hinaus ermöglicht dieser in einer Klartextdatei gespeicherte API-SCHLÜSSEL: auf die GitHub-API zuzugreifen (abhängig vom Umfang, aber wahrscheinlich hat jeder, der über Apikey verfügt, Zugriff auf den Quellcode von Repo) und jede Git-Operation auszuführen (Push, Pull). Mit anderen Worten, eine solche Klartextdatei ist ein großartiges Geschenk, insbesondere wenn Sie Zugriff auf private Repositories haben (wahrscheinlich werden sie sehr bald veröffentlicht)
maxkoryukov

@maxkoryukov OK, wie wäre es, wenn ich den letzten Satz als "so sicher wie die Verwendung eines passphrasenlosen ssh-Privatschlüssels" umformuliere? In Schritt 3 wird versucht, die Eingabeaufforderung für ein Kennwort zu umgehen (vorausgesetzt, Sie arbeiten natürlich an Ihrem eigenen Computer). In einem solchen Fall wäre die Konsequenz dieselbe, wenn es jemandem gelingt, Ihre ~ / .git-Anmeldeinformationen ODER Ihren passphrasenlosen ssh-Privatschlüssel zu erhalten. Ich stimme Ihnen zu, dass ein passphrasengeschützter SSH-Schlüssel sicherer (und weniger bequem) wäre.
RayLuo

@ RayLuo, LGFM;)
Maxkoryukov

16

Ich hatte ein ähnliches Problem. Ich musste die im Befehl git verwendete URL ändern, um meinen Benutzernamen einzuschließen.

git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git

Wenn Sie dann nach PW gefragt werden, verwenden Sie das Zugriffstoken, das Sie erstellt haben, indem Sie den Anweisungen in Gergo Erdosis Antwort folgen.


1
Das funktioniert bei mir, aber wenn ich versuche, git remote set-url --push originmit demselben Wert zu setzen, git push origin masterschlägt dies immer noch fehl.
Danimal

Funktioniert auch für mich, nachdem ich meinen Benutzernamen in den Remote-Pfad aufgenommen habe, wie von Jester beschrieben.
Ovo

Dies funktionierte nicht für mich in der Windows-Eingabeaufforderung, aber innen git-bashfunktionierte gut
Vincent Tang

Hat in Ubuntu perfekt für mich funktioniert. Vielen Dank!
Ryan Russell

12

Unter Linux können Sie Ihre GitHub-Identität mit einem SSH-Schlüssel authentifizieren.

1) Generieren eines neuen SSH-Schlüssels ( Quelle )

Terminal öffnen.

Fügen Sie den folgenden Text ein und ersetzen Sie ihn durch Ihre GitHub-E-Mail-Adresse.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Dadurch wird ein neuer SSH-Schlüssel erstellt, wobei die bereitgestellte E-Mail als Bezeichnung verwendet wird.


2) Verknüpfen des Schlüssels mit Ihrem GitHub-Konto

Öffnen Sie das Terminal und kopieren Sie den generierten öffentlichen Schlüssel

cat ~/.ssh/id_rsa.pub

Sollte etwas als ausgeben

ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com

Navigieren Sie zu https://github.com/settings/keys und klicken Sie auf New SSH Key, geben Sie ihm einen Titel und kopieren Sie den öffentlichen Schlüssel.

Geben Sie hier die Bildbeschreibung ein


3) Ändern Sie den Git-Ursprung von https://nachssh

Öffnen Sie das Terminal cdzu Ihrem Repository-Speicherort und -Typ

git remote set-url origin git@github.com:<github username>/<repository name>

1
Richtig, aber für die Frage irrelevant. Authentifizierte über httpsist manchmal nützlich, zB bei Aufbewahrung über vor- , httpswährend die Gabel über aufweist ssh, so dass Sie nicht versehentlich vor- schieben, da httpsnach dem Passwort fragen und erinnern Sie daran , dass Sie die falsche Repo gezielt
stelios

Sie benötigen kein Linux, um SSH zu verwenden. Die Verwendung von SSH ist meiner Meinung nach auch die bessere Antwort für Windows. Das am häufigsten verwendete Werkzeug für Fenster ist Pagaent and Putty
Andrew

3

Das hat bei mir funktioniert:

  • Gehen Sie zu [your-git-repo] /. Git / config

  • Klicken Sie unter [remote "origin"]Ändern des URLSchlüssels vom http-Protokoll auf git.

Beispiel

Wenn der Wert von urlist https://github.com/ .git es ändern zugit@github.com:<repo-url>.git


3

Wenn Sie bereits SSH-Schlüssel verwenden, werden Sie nach dem Aktivieren von 2FA gezwungen, Remote mit SSH zu lesen / schreiben. Sie müssen keine persönlichen Token hinzufügen, sondern verwenden weiterhin Ihr vorhandenes SSH-Schlüsselpaar.

Ändern Sie einfach Ihre Remote-URL von HTTPS in SSH:

git remote set-url origin git@github.com:<github-username>/<repo-name>

0

Dies funktionierte für mich nach der Aktivierung von 2FA auf Github:

  1. Erstellen Sie ein persönliches Zugriffstoken: https://help.github.com/de/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line .
    HINWEIS: Denken Sie daran, die richtigen Berechtigungen für das Token auszuwählen.

  2. Ausführen:
    git clone https://github.com/username/repo.git
    Benutzername: your_username
    Passwort:your_token

Lesen Sie weiter: https://help.github.com/en/github/using-git/which-remote-url-should-i-use


0

Ich hatte dieses Problem bei einem vorhandenen Repo, als ich 2FA (Zwei-Faktor-Authentifizierung) für eines meiner privaten Repos aktivierte. Ich konnte es mit den folgenden Schritten auf meinem Ubuntu 19.0-Terminal lösen: -

  1. Fügen Sie Ihren SSH- Schlüssel zu Github hinzu, damit Sie Ihr Passwort nicht erneut verwenden müssen, da Sie jetzt 2FA aktiviert haben. Besuchen Sie die Github-Seite, um zu erfahren, wie es einfach geht.
  2. Sobald der Schlüssel hinzugefügt wurde, gehen Sie zu Ihrem Terminal und aktualisieren Sie die Ursprungs-URL

    git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>

Das ist es. Hoffentlich hilft es

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.