GitHub身份验证在https上失败,返回错误的电子邮件地址。

141

在命令行中以GitHub发起推送或进行任何其他操作(通过https,而非ssh),如果需要输入用户名和密码,不仅会失败,而且在失败时会返回

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

我没有一个@github.com的地址。密码和用户名都是正确的。

我知道我可以切换到SSH并使用密钥,但这并不能解释为什么通过https身份验证失败。


文档 http://git-scm.com/book/zh/v2/Git-在服务器上-生成SSH公钥 git-config - 获取和设置存储库或全局选项 http://git-scm.com/docs/git-config - John Smith
10个回答

177

GitHub的支持团队很快就确定了问题的根源:双重认证。

要使用https在shell上使用GitHub,请创建一个OAuth令牌。正如页面所述,我确实需要从钥匙串中删除我的用户名和密码凭据,但是有了osx-keychain,令牌将被存储为密码,而且即使没有双重认证,事情也会完全按照https工作。


5
您可以在加密的netrc文件中使用PAT(个人访问令牌):https://dev59.com/XGYr5IYBdhLWcg3wR4Us#18607931 - VonC
PAT和OAuth有什么区别? - lindhe
@lindhe OAuth令牌是一种令牌,而在这种情况下PAT是OAuth令牌。 - Kerry Jones
为什么没有关于这个问题的消息,而是一个虚假的身份验证错误?我怎么知道这个。 - pabrams

25

我没有@github.com地址。

你不必拥有:@是用户名和密码与域名之间的分隔符。
这不是一个电子邮件地址。

完整的 GitHub https url 如下:

# 2014:
https://username:password@github.com/username/reponame.git

# 2021+:
https://username:token@github.com/username/reponame.git

没有令牌(然后将在命令行上询问),那会给出:

https://username@github.com/username/reponame.git

但是,username@github.com 并不是电子邮件地址,而只是凭据的第一部分。

确保你的 usernamereponame 的大小写正确:它区分大小写


自2021年8月起,GitHub 不再接受账户密码进行在 GitHub.com 上进行 Git 操作的身份验证。
仅支持使用PAT(个人访问令牌)


请注意,您可以将凭据存储和加密在以下位置:


您也可以不输入密码,每次都手动输入密码。这种情况下,命令应该是 https://username@github.com/username/reponame.git - Mark Hildreth
哦,那样就有道理了。谢谢。我知道大小写敏感的问题,也相信我提供的用户名和密码是正确的。(它们可以顺利地登录网站) - ele
2
@ele 是的,但是你的密码包含特殊字符吗(例如 ! * ' ( ) ; : @ & = + $ , / ? # [ ])?它们需要进行“百分号编码”(http://en.wikipedia.org/wiki/Percent-encoding)。 - VonC
密码是字母数字混合的。下次我在机器旁边时会查看'git remote -v'的输出,但听起来我可能需要联系GitHub支持。 - ele
@ele 首先尝试使用 .netrc 方法(仅用于测试,无需加密)。如果这不起作用,则下一步是联系 GitHub 支持。 - VonC

21
  • 打开凭据管理器 => Windows 管理器
  • 删除所有与 tfs 相关的内容
  • 现在点击 添加通用凭据 并提供以下值

    (1) Internet 或网络地址: git:https://tfs.donamain 名称 (2) 用户名: 您的用户名 (3) 密码: 您的密码

    这应该可以解决问题


1
哇,我喜欢它如果你输错密码会存储错误的密码。然后你必须手动更新或删除它。 - Kellen Stuart

10

如果您之前存储了不同的凭据,这可能会发生在Windows中。前往凭据管理器并删除存储的GitHub凭据。


1
也有可能直接在Windows凭据管理器中编辑密码为新密码。 - Spenhouet

10

我也遇到过同样的问题,当我为Github启用了双重身份验证。以下是我解决问题的步骤:

  • 获取您的个人访问令牌。如果还没有,请检查并生成。这是链接:https://github.com/settings/tokens
  • 进入本地文件夹并删除它,然后重新从Github克隆分支。
  • 现在尝试之前尝试的命令,即:git pull origin master
  • 输入用户名,并将令牌粘贴到密码中,也不要忘记将该令牌保存在某个地方,以便在需要时可以重新使用。

这样做将解决您的问题。


好的提醒 - 我在 Mac 上也遇到了这个问题 => 我不得不重新生成我的 PAT - SliverNinja - MSFT
如果我们需要之前生成的令牌中没有的权限,我们必须生成新的令牌。此外,如果我们丢失了之前的令牌,我们可以生成这个新的令牌,并将其用作密码进行身份验证,而不是使用原始的 Git 密码。 - Mohd Belal

9

6

如果有其他人也有类似的问题,希望这篇文章能对你有所帮助。我一开始在Mac应用程序中登录成功,并且命令行也可以正常工作,但是我开启两步验证后,我的命令返回错误。我不得不退出应用程序,然后按照ele在这里的回答,在我的命令中使用个人访问令牌。

希望这能对你有所帮助!


2
  • 前往https://github.com/settings/tokens生成您的令牌
  • 生成您的令牌并安全存储
  • 现在尝试将您的代码推送到GitHub
  • 您需要两次提供您的凭据。第一次提供您的gmail和密码,第二次提供您的用户名和生成的令牌(在密码字段中)。
  • 另外一件事是,如果您进入您的GitHub个人资料页面,您会在URL中找到您的用户名。

这对我有用,希望它能为您节省时间。祝一切顺利。


0
  • 适用于Mac和Windows 前往Github token generator生成令牌并复制它

    • 生成令牌并复制它
  • 然后在终端中导航到文件夹并执行git push

  • 它会要求输入用户名和密码,将个人访问令牌放入密码中

注意 - 如果推送不成功,请使用git push --force


-2
在Windows上,您可能会被您的杀毒软件或Windows防火墙默默地阻止。暂时关闭这些服务并从远程源推送/拉取。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接