138

我刚刚启用了 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/'

有小费吗?

4

10 回答 10

182

您需要生成访问令牌。您可以通过转到设置页面来创建一个。

在此处输入图像描述

在命令行中将此访问令牌用作您的密码。

于 2014-08-28T13:53:35.850 回答
48

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

  1. 感谢 Gergo Erdosi。他的回答基本上是对的,只是 Github 改变了那个设置页面。截至 2016 年底,您需要从个人访问令牌页面生成访问令牌。

    在此处输入图像描述

    在命令行中将此访问令牌用作您的密码。

  2. 您可以通过将用户名包含到您的项目远程 url 中来保留您的用户名。一种方法是编辑您.git/config以将行修改url为以下格式:

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

  3. 您可以通过仅运行一次来​​保留您的密码:

    $ git config credential.helper store

    然后你未来的 git 密码将存储在 ~/.git-credentials 中,以纯文本格式,使用https://user:PlaintextPassword@example.com.

    以明文形式存储密码通常会被视为安全风险。但在这种 2FA 案例中,凭证不是您的真实密码,它是一个随机生成的字符串。因此,它与使用ssh 私钥和无密码 ssh 私钥一样安全。警告:请记住,如果您碰巧在这台机器上使用了另一个没有 2FA 的 git 帐户,那么这些真实密码也将以明文形式存储。

PS:或者,您可以选择使用基于 ssh 的登录,使用受密码保护的 ssh 私钥,这样会更安全且不太方便,但这超出了此答案的范围。

于 2016-10-21T00:47:08.730 回答
18

您可以设置 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
  • 给它一个标题
  • 复制粘贴上一个命令输出中的公钥

在此处输入图像描述


3) 将 git origin 从 更改https://ssh

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

git remote set-url origin git@github.com:<github username>/<repository name>
于 2017-01-05T07:47:25.240 回答
17

我有一个类似的问题。我必须更改 git 命令中使用的 url 以包含我的用户名。

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

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

于 2015-10-10T20:20:34.673 回答
6

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

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

git remote set-url origin git@github.com:<github-username>/<repo-name>
于 2019-09-21T14:36:46.497 回答
4

2021 年更新

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

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

于 2021-01-04T12:45:14.350 回答
3

这对我有用:

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

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

例子

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

于 2019-05-07T09:18:22.333 回答
1

在 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

于 2020-05-29T11:30:20.247 回答
0

当我为我的一个私人存储库启用 2FA(双因素身份验证)时,我在现有存储库中遇到了这个问题。我能够在我的 ubuntu 19.0 终端上按照以下步骤解决它:-

  1. 将您的 ssh 密钥添加到github,这样您就不需要再次使用密码了,因为现在您已启用 2FA。访问 github 页面以了解如何轻松完成。
  2. 添加密钥后,转到您的终端,并更新原始 url

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

就是这样。希望它有所帮助

于 2020-05-30T09:43:20.497 回答
0

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

于 2020-11-17T19:01:02.837 回答