L'authentification Git échoue après l'activation de 2FA

97

Je viens d'activer 2FA (je ne peux penser à aucune autre modification que j'ai faite) et git a demandé mon nom d'utilisateur et mon mot de passe. J'ai fourni les deux, mais ils étaient «faux». J'ai essayé de nombreuses solutions ici: Git push nécessite un nom d'utilisateur et un mot de passe, mais cela n'a pas fonctionné. En particulier, lors du passage de https à ssh, la clé ssh donne

Autorisation refusée (publickey). fatal: impossible de lire à partir du référentiel distant.

$ 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://[email protected]': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

Des conseils?

Max Bileschi
la source
1
"Autorisation refusée (publickey). Fatal: impossible de lire à partir du référentiel distant." est un problème distinct qui peut être résolu en configurant une clé SSH pour votre compte: help.github.com/articles
...
1
souvent ce n'est pas un problème 2FA, mais plutôt résolu en passant de https à git
SCBuergel.eth

Réponses:

125

Vous devez générer un jeton d'accès. Vous pouvez en créer un en accédant à votre page de paramètres .

entrez la description de l'image ici

Utilisez ce jeton d'accès comme mot de passe dans la ligne de commande.

Gergo Erdosi
la source
hm, j'ai essayé cela après set-url à https, et cela n'a pas fonctionné. J'ai aussi essayé de retourner set-url à ssh et de supprimer l'entrée .ssh / known_hosts, mais en vain.
Max Bileschi
Pouvez-vous ajouter la sortie de ligne de commande à votre question? Y compris les commandes que vous exécutez.
Gergo Erdosi
La sortie a été ajoutée
Max Bileschi
J'ai eu un problème étrange où je devais commencer un clone et entrer mon nouveau jeton d'accès. Après cela (sans même attendre la fin du clone), j'ai pu donner mon nouveau jeton d'accès à mon répertoire d'origine dans lequel j'essayais d'exécuter git pull. Probablement un problème local, mais cela pourrait aider quelqu'un.
sg
Je reçois The requested URL returned error: 403quand j'utilise le jeton pour le mot de passe, pour un push over https
stelios
38

Une solution de bout en bout prend 3 étapes.

  1. Félicitations à Gergo Erdosi. Sa réponse est en grande partie juste, c'est juste que Github change cette page de configuration. À la fin de 2016, vous devez générer un jeton d'accès à partir de votre page de jetons d'accès personnels .

    entrez la description de l'image ici

    Utilisez ce jeton d'accès comme mot de passe dans la ligne de commande.

  2. Vous pouvez conserver votre nom d'utilisateur en l'incluant dans l'URL distante de votre projet. Une des façons de le faire est de modifier votre .git/configpour modifier la urlligne dans le format suivant:

    url = https://[email protected]/owner/repo.git

  3. Vous pouvez conserver votre mot de passe en l'exécutant une seule fois:

    $ git config credential.helper store

    et ensuite votre ou vos futurs mots de passe git seront stockés dans ~ / .git-credentials, en texte clair, en utilisant le format https://user:[email protected].

    Le stockage des mots de passe en texte clair serait normalement considéré comme un risque de sécurité. Mais dans ce cas 2FA, les informations d'identification ne sont PAS votre vrai mot de passe, c'est une chaîne générée aléatoirement. C'est donc aussi sûr que d'utiliser une clé privée ssh une clé privée ssh sans phrase de passe. CAVEAT: gardez à l'esprit que, si vous utilisez également un (des) autre (s) compte (s) git sans 2FA sur cette machine, ces vrais mots de passe seront également stockés en texte brut.

PS: Alternativement, vous pouvez choisir d'utiliser une connexion basée sur ssh, en utilisant une clé privée ssh protégée par une phrase de passe, ce qui serait plus sûr et moins pratique, mais cela sort du cadre de cette réponse.

RayLuo
la source
1
cela a fonctionné pour moi et m'a permis de ne pas avoir à taper un et pw à chaque fois que j'interagis avec git. J'utilise Windows avec cygwin et je n'ai jamais pu faire fonctionner les touches ssh - c'est le cas!
liltitus27
sur le dernier para: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- ce n'est pas vrai du tout . Les clés SSH peuvent être facilement protégées par une phrase de passe prête à l'emploi. Plain ~./git-credentials- n'est pas du tout sécurisé!
maxkoryukov
de plus, cette clé API stockée dans un fichier en clair permet: d' accéder à l'API GitHub (dépend de la portée, mais probablement, tous ceux qui ont apikey auront un accès au code source du dépôt) et d' effectuer toute opération git (push, pull). En d'autres termes, un tel fichier en clair est un cadeau génial, surtout si vous avez accès à des référentiels privés (ils deviendront probablement publics très bientôt)
maxkoryukov
@maxkoryukov OK, que diriez-vous de reformuler la dernière phrase comme "aussi sûr que d'utiliser une clé privée ssh sans phrase de passe"? Parce que le but de l'étape 3 est d'essayer de contourner l'invite pour un mot de passe (en supposant que vous travaillez sur votre propre ordinateur, bien sûr). Dans ce cas, si quelqu'un parvient à mettre la main sur vos ~ / .git-credentials OU votre clé privée ssh sans phrase de passe, la conséquence serait la même. Je suis d'accord avec vous qu'une clé ssh protégée par une phrase de passe serait plus sûre (et moins pratique).
RayLuo
@RayLuo, LGFM;)
maxkoryukov
16

J'avais un problème similaire. J'ai dû modifier l'url utilisée dans la commande git pour inclure mon nom d'utilisateur.

git push https://[email protected]/mlbileschi/scala.git

Ensuite, quand il demande PW, utilisez le jeton d'accès que vous avez créé en suivant les instructions de la réponse de Gergo Erdosi.

bouffon
la source
1
cela fonctionne pour moi, mais si j'essaie de définir git remote set-url --push originavec la même valeur, cela git push origin masteréchoue toujours.
Danimal
Fonctionne également pour moi après avoir inclus mon nom d'utilisateur dans le chemin distant comme décrit par Jester.
ovo
Cela n'a pas fonctionné pour moi dans l'invite de commande Windows, mais à l'intérieur git-basha bien fonctionné
Vincent Tang
A parfaitement fonctionné pour moi dans Ubuntu. Merci!
Ryan Russell
12

Sous Linux, vous pouvez authentifier votre identité GitHub à l'aide d'une clé SSH.

1) Génération d'une nouvelle clé SSH ( source )

Terminal ouvert.

Collez le texte ci-dessous, en le remplaçant dans votre adresse e-mail GitHub.

ssh-keygen -t rsa -b 4096 -C "[email protected]"

Cela crée une nouvelle clé ssh, en utilisant l'e-mail fourni comme étiquette.


2) Lier la clé à votre compte GitHub

Ouvrez le terminal et copiez la clé publique générée

cat ~/.ssh/id_rsa.pub

Devrait sortir quelque chose comme

ssh-rsa AAAAB3NzaC1y ... mKAKw== [email protected]

Accédez à https://github.com/settings/keys et cliquez sur New SSH Key, donnez-lui un titre et copiez-collez la clé publique.

entrez la description de l'image ici


3) Changer l'origine de git de https://enssh

Ouvrez le terminal, cdà l'emplacement et au type de votre référentiel

git remote set-url origin [email protected]:<github username>/<repository name>
Jossef Harush
la source
1
Vrai, mais sans rapport avec la question. L'authentification via httpsest parfois utile, par exemple lorsque vous restez en amont httpstout en ayant votre fork ssh, afin d'éviter de pousser accidentellement vers l'amont, car vous httpsdemanderez le mot de passe et vous rappellera que vous avez ciblé le mauvais repo
stelios
Vous n'avez pas besoin de Linux pour utiliser SSH. L'utilisation de SSH est aussi la meilleure réponse pour Windows, je pense. L'outil couramment utilisé pour Windows est Pagaent and Putty
Andrew le
3

Cela a fonctionné pour moi:

  • Accédez à [your-git-repo] /. Git / config

  • Sous [remote "origin"]Changer la URLclé du protocole http en git.

Exemple

Si la valeur de urlest https://github.com/ .git, remplacez-la par[email protected]:<repo-url>.git

imsinu9
la source
3

Si vous utilisez déjà des clés ssh, après avoir activé 2FA, il vous obligera à lire / écrire à distance avec SSH. Vous n'avez pas vraiment besoin d'ajouter des jetons personnels, mais continuez à utiliser votre paire de clés SSH existante.

Changez simplement votre URL distante de HTTPS à SSH:

git remote set-url origin [email protected]:<github-username>/<repo-name>
Sakhi Mansoor
la source
0

Cela a fonctionné pour moi après l'activation de 2FA sur Github:

  1. Créez un jeton d'accès personnel: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line .
    REMARQUE: n'oubliez pas de sélectionner les autorisations appropriées pour le jeton.

  2. Exécuter:
    git clone https://github.com/username/repo.git
    Nom d'utilisateur: your_username
    Mot de passe:your_token

Lectures complémentaires: https://help.github.com/en/github/using-git/which-remote-url-should-i-use

ravikcm
la source
0

J'étais confronté à ce problème sur le dépôt existant lorsque j'ai activé 2FA (authentification à deux facteurs) pour l'un de mes dépôts privés. J'ai pu le résoudre en suivant les étapes ci-dessous sur mon terminal ubuntu 19.0: -

  1. Ajoutez votre clé ssh à github afin de ne plus avoir à utiliser votre mot de passe, car vous avez maintenant activé 2FA. Visitez la page github pour savoir comment le faire facilement.
  2. Une fois la clé ajoutée, accédez à votre terminal et mettez à jour l'url d'origine

    git remote set-url origin [email protected]:<USERNAME>/<BRANCH-NAME>

J'espère que ça aide

Milind
la source