L'autenticazione Git non riesce dopo aver abilitato 2FA


97

Ho appena abilitato 2FA (non riesco a pensare ad altre modifiche che ho fatto) e git ha chiesto il mio nome utente e password. Ho fornito entrambi, ma erano "sbagliati". Ho provato molte delle soluzioni qui: Git push richiede nome utente e password ma non ha funzionato. In particolare, quando si passa da https a ssh, la chiave ssh dà

Autorizzazione negata (chiave pubblica). fatale: impossibile leggere dal repository remoto.

$ 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/'

Qualche consiglio?


1
"Autorizzazione negata (chiave pubblica). Irreversibile: impossibile leggere dal repository remoto." è un problema separato che può essere risolto configurando una chiave SSH per il tuo account: help.github.com/articles/…
Ajedi32

1
spesso questo non è un problema 2FA ma invece risolto passando da https a git
SCBuergel.eth

Risposte:


125

Devi generare un token di accesso. Puoi crearne uno andando nella pagina delle impostazioni .

inserisci qui la descrizione dell'immagine

Usa questo token di accesso come password nella riga di comando.


hm, l'ho provato dopo aver impostato l'url su https e non ha funzionato. Ho anche provato a impostare nuovamente l'URL su ssh e rimuovere la voce .ssh / known_hosts, ma senza alcun risultato.
Max Bileschi

Puoi aggiungere l'output della riga di comando alla tua domanda? Compresi i comandi che stai eseguendo.
Gergo Erdosi

L'uscita è stata aggiunta
Max Bileschi

Ho avuto qualche strano problema in cui ho dovuto iniziare un clone e inserire il mio nuovo token di accesso. Dopo questo (senza nemmeno aspettare che il clone finisse) sono stato in grado di dare il mio nuovo token di accesso alla mia directory originale in cui stavo cercando di eseguire git pull. Probabilmente un problema locale, ma questo potrebbe aiutare qualcuno.
sg

Ottengo The requested URL returned error: 403quando utilizzo il token per la password, per un push over https
stelios

38

Una soluzione end-to-end richiede 3 passaggi.

  1. Complimenti a Gergo Erdosi. La sua risposta è in gran parte corretta, è solo che Github cambia quella pagina di impostazione. A partire dalla fine del 2016, è necessario generare un token di accesso dalla pagina dei token di accesso personali .

    inserisci qui la descrizione dell'immagine

    Usa questo token di accesso come password nella riga di comando.

  2. Puoi rendere persistente il tuo nome utente includendolo nell'URL remoto del tuo progetto. Uno dei modi per farlo è modificare il tuo .git/configper modificare la urlriga nel seguente formato:

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

  3. Puoi rendere persistente la tua password eseguendolo solo una volta:

    $ git config credential.helper store

    e quindi le tue future password git verranno archiviate in ~ / .git-credentials, in testo normale, utilizzando il formato https://user:PlaintextPassword@example.com.

    La memorizzazione delle password in testo normale sarebbe normalmente considerata un rischio per la sicurezza. Ma in questo caso 2FA, la credenziale NON è la tua vera password, è una stringa generata casualmente. Quindi è sicuro come usare una chiave privata ssh una chiave privata ssh senza passphrase. CAVEAT: tieni presente che, se ti capita di utilizzare anche un altro account git senza 2FA su questa macchina, anche quelle password reali verranno memorizzate in testo normale.

PS: in alternativa, potresti scegliere di utilizzare l'accesso basato su ssh, utilizzando una chiave privata ssh protetta da passphrase, che sarebbe più sicura e meno conveniente, ma esula dallo scopo di questa risposta.


1
questo ha funzionato per me e mi ha permesso di non dover digitare un e pw ogni volta che interagisco con git. Uso Windows con Cygwin e non sono mai riuscito a far funzionare le chiavi SSH - questo fa!
liltitus27

sull'ultimo paragrafo: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- non è affatto vero . Le chiavi SSH possono essere facilmente protette da una passphrase pronta all'uso . Semplice ~./git-credentials: non è affatto protetto!
maxkoryukov

inoltre, questa API KEY memorizzata in un file di testo in chiaro consente di: accedere all'API GitHub (dipende dall'ambito, ma probabilmente tutti coloro che hanno apikey avranno accesso al codice sorgente del repository) ed eseguire qualsiasi operazione git (push, pull). In altre parole, questo file di testo in chiaro è un regalo fantastico, soprattutto se hai accesso a repository privati ​​(probabilmente diventeranno pubblici molto presto)
maxkoryukov

@maxkoryukov OK, che ne dici di riformulare l'ultima frase come "sicuro come usare una chiave privata ssh senza passphrase"? Perché l'intero punto del passaggio 3 sta cercando di bypassare la richiesta di una password (supponendo che tu stia lavorando sul tuo computer, ovviamente). In tal caso, se qualcuno riesce a impossessarsi delle tue ~ / .git-credentials O della tua chiave privata ssh senza passphrase, la conseguenza sarebbe la stessa. Sono d'accordo con te sul fatto che una chiave SSH protetta da passphrase sarebbe più sicura (e meno conveniente).
RayLuo

@RayLuo, LGFM;)
maxkoryukov

16

Ho avuto un problema simile. Ho dovuto modificare l'URL utilizzato nel comando git per includere il mio nome utente.

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

Quindi quando richiede PW usa il token di accesso che hai creato seguendo le istruzioni nella risposta di Gergo Erdosi.


1
questo funziona per me, ma se provo a impostare git remote set-url --push origincon lo stesso valore, git push origin masternon riesce ancora.
Danimal

Funziona anche per me dopo aver incluso il mio nome utente nel percorso remoto come descritto da Jester.
ovo

Questo non ha funzionato per me nel prompt dei comandi di Windows, ma all'interno ha git-bashfunzionato bene però
Vincent Tang

Ha funzionato perfettamente per me in Ubuntu. Grazie!
Ryan Russell il

12

Su Linux, puoi autenticare la tua identità GitHub utilizzando una chiave SSH.

1) Generazione di una nuova chiave SSH ( sorgente )

Apri terminale.

Incolla il testo qui sotto, sostituendolo con il tuo indirizzo email GitHub.

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

Questo crea una nuova chiave ssh, utilizzando l'e-mail fornita come etichetta.


2) Collegamento della chiave al tuo account GitHub

Apri il terminale e copia la chiave pubblica generata

cat ~/.ssh/id_rsa.pub

Dovrebbe produrre qualcosa come

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

Vai a https://github.com/settings/keys e fai clic New SSH Key, assegnagli un titolo e copia e incolla la chiave pubblica.

inserisci qui la descrizione dell'immagine


3) Cambia l'origine di git da https://assh

Apri il terminale, cdnella posizione del tuo repository e digita

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

1
Vero, ma irrilevante con la domanda. L'autenticazione tramite a httpsvolte è utile, ad esempio quando si mantiene upstream httpsmentre si ha il fork over ssh, in modo da evitare di spingere accidentalmente a upstream, poiché httpschiederà la password e ti ricorderà che hai
preso di

Non hai bisogno di Linux per usare SSH. L'uso di SSH è la risposta migliore anche per Windows, credo. Lo strumento comunemente usato per Windows è Pagaent e Putty
Andrew

3

Questo ha funzionato per me:

  • Vai a [your-git-repo] /. Git / config

  • In [remote "origin"]Cambia la URLchiave dal protocollo http a git.

Esempio

Se il valore di urlè https://github.com/ .git, modificalo ingit@github.com:<repo-url>.git


3

Se stai già utilizzando le chiavi ssh, dopo aver abilitato 2FA ti imporrà di leggere / scrivere in remoto con SSH. Non è davvero necessario aggiungere token personali piuttosto continuare a utilizzare la coppia di chiavi SSH esistente.

Basta cambiare il tuo URL remoto da HTTPS a SSH:

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

0

Questo ha funzionato per me dopo aver abilitato 2FA su Github:

  1. Crea un token di accesso personale: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line .
    NOTA: ricordarsi di selezionare le autorizzazioni corrette per il token.

  2. Esegui:
    git clone https://github.com/username/repo.git
    Nome utente: your_username
    Password:your_token

Ulteriori letture: https://help.github.com/en/github/using-git/which-remote-url-should-i-use


0

Stavo affrontando questo problema su un repository esistente quando ho abilitato 2FA (autenticazione a due fattori) per uno dei miei repository privati. Sono stato in grado di risolverlo seguendo i passaggi seguenti sul mio terminale Ubuntu 19.0: -

  1. Aggiungi la tua chiave ssh a GitHub in modo da non dover utilizzare nuovamente la password, poiché ora hai abilitato 2FA. Visita la pagina GitHub per sapere come farlo facilmente.
  2. Una volta aggiunta la chiave, vai al tuo terminale e aggiorna l'URL di origine

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

Questo è tutto Spero che aiuti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.