启用2FA 后 Git 身份验证失败

我刚启用了2FA (我想不出还有什么其他更改) ,git 询问我的用户名和密码。我两者都提供了,但他们“错了”。我在这里尝试了很多解决方案: Git push 需要用户名和密码,但是没有用。特别是,当从 https 切换到 ssh 时,ssh 键给出

拒绝(公开)许可。 无法从远程存储库读取。

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

有什么建议吗?

50654 次浏览

您需要生成一个访问令牌。

enter image description here

在命令行中使用此访问令牌作为密码。

我也遇到过类似的问题,我不得不修改 git 命令中使用的 URL 来包含我的用户名。

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

然后,当它请求 PW 时,使用您根据 Gergo Erdosi 的回答中的说明创建的访问令牌。

端到端解决方案需要3个步骤。

  1. 向 Gergo Erdosi 致敬。他的回答基本上是正确的,只是 Github 改变了设置页面。截至2016年底,你需要从你的 个人访问令牌页 生成访问令牌

    enter image description here

    在命令行中使用此访问令牌作为密码。

  2. 可以通过将用户名包含到项目远程 URL 中来持久化用户名。其中一种方法是编辑 .git/config,将 url行修改为以下格式:

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

  3. 您可以通过只运行一次来保持您的密码:

    $ git config credential.helper store

    然后您将来的 git 密码将以明文形式存储在 ~/. git-凭证中,格式为 https://user:PlaintextPassword@example.com

    以明文储存密码通常会构成安全风险。但是在这个2FA 的例子中,凭证并不是您真正的密码,而是一个随机生成的字符串。因此,它就像使用无密码短语的 ssh 私钥一样安全。注意: 请记住,如果您碰巧也在这台机器上使用另一个没有2FA 的 git 帐户,那些真正的密码也将以明文形式存储。

PS: 或者,您可以选择使用基于 ssh 的登录,使用密码短语保护的 ssh 私钥,这将更加安全,也不那么方便,但这超出了本答案的范围。

您可以设置 SSH 密钥(在 Linux 和 Windows 上)

Windows 用户须知
确保在用户目录中定义并设置了 HOME环境变量
例如 C:\Users\jossef(了解更多)


1)生成新的 SSH 密钥(来源)

打开终端/cmd 并粘贴下面的文本(替换为您的 GitHub 电子邮件地址)

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

2)将公钥链接到您的 GitHub 帐户

  • 在 Linux/macOS 上,在终端上运行:

    cat ~/.ssh/id_rsa.pub
    
  • 在 Windows 上,运行 cmd:

    type %HOME%\.ssh\id_rsa.pub
    

这将输出公钥:

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

导航到 https://github.com/settings/keys

  • New SSH Key
  • 给它起个名字
  • 从前面的命令输出中复制粘贴公钥

enter image description here


3)把 git 的源代码从 https://改为 ssh

打开终端/cmd 和 cd到您克隆的存储库目录并运行:

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

这对我很有效:

  • 转到[ your-git-repo ]/. git/config

  • [remote "origin"]下将 URL密钥从 http 协议更改为 git。

例子

如果 url的值是 https://github.com/.git 将其更改为 git@github.com:<repo-url>.git

如果您已经在使用 SSH 密钥,启用2FA 之后,它将强制您使用 SSH 进行远程读/写操作。您实际上并不需要添加个人令牌,而是继续使用现有的 SSH 密钥对。

只需将远程 URL 从 HTTPS 更改为 SSH:

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

在 Github 上启用了2FA 之后,这对我很有用:

  1. 创建个人访问令牌: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
    注意: 请记住为令牌选择正确的权限。


  2. git clone https://github.com/username/repo.git
    用户名: your_username
    密码: your_token

延伸阅读: https://help.github.com/en/github/using-git/which-remote-url-should-i-use

当我为我的一个私人回购启用2FA (双因素认证)时,我正面临着现有回购的这个问题。 在我的 ubuntu 19.0终端上,我能够按照以下步骤解决这个问题:-

  1. 将 ssh 密钥添加到 Github,这样就不需要再次使用密码,因为现在已经启用了2FA。访问 github 页面知道如何轻松地做到这一点。
  2. 一旦键被添加,转到您的终端,并更新原始网址

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

就是这样,希望能有帮助

我在换用旧笔记本电脑时遇到了这个问题。真正的问题是我运行的是一个旧版本的 git。一旦我使用新的跨平台凭证管理器更新到最新版本的 git,它就能够完美地为我签名 w/2FA (看起来它会自动为您创建一个 PAT)。

2021年最新情况

不确定这是否适用于所有人,但是将我的 Git 版本2.27.0更新到最新的(目前是 2.30.0)解决了我的问题,而尝试在命令行中使用个人访问令牌作为密码却没有。

在更新之后,当试图推送时,系统会提示我通过浏览器登录到 GitHub,而不是在对话框或命令行中键入凭据。