支持密码验证已被移除。

1589
我在使用git pull命令时,在控制台上遇到了这个错误:
远程:支持密码身份验证已于2021年8月13日移除。 请参阅https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls以获取有关当前推荐的身份验证方式的信息。 致命错误:身份验证失败...
这很奇怪,因为我只是按照文档的说明,在GitHub上创建了一个令牌两周前。该令牌将于2021年10月26日过期。为什么今天被移除了呢?

13
@JuanC 这是一份针对 Mac 的快速教程,视频链接为 https://youtu.be/iKf8-hhdWjs。 - VedantK
6
谢谢@VeKe的教程!我成功解决了问题,但是有点让人误解的是,当我被要求输入“密码”时,实际上用的是令牌。请问这个问题该如何翻译? - Juan C
6
可能是你的仓库设置了使用 HTTPS URL 而不是 SSH URL。请查看这里的“从 HTTPS 切换到 SSH 远程 URL”部分:https://docs.github.com/zh/get-started/getting-started-with-git/managing-remote-repositories#switching-remote-urls-from-https-to-ssh - user3170906
6
也许现在是时候接受一个答案了(在这29个答案中选择一个)? - Peter Mortensen
1
目前(23天前)这个问题在Stack Overflow上的21642945个问题中,以查看率(可能是搜索引擎点击率-或者它变得病毒式传播了吗?)而言处于非常顶端。在那23天里,平均每天有7600次浏览(尽管受SEDE更新计划的影响-因此实际速率可能会显着提高)。 - Peter Mortensen
显示剩余15条评论
49个回答

1973
从2021年8月13日起,GitHub不再接受账户密码进行Git操作的身份验证。您需要添加一个PAT(个人访问令牌),并按照以下方法在您的系统上添加一个PAT。

在GitHub上创建个人访问令牌

从您的GitHub帐户中,转到设置开发人员设置个人访问令牌生成新令牌(输入密码)→填写表格→单击生成令牌复制生成的令牌,它将类似于ghp_sFhFsSHhTzMDreGRLjmks4Tzuzgthdvfsrta

现在根据您的机器按照以下方法操作:

对于Windows操作系统

控制面板中找到凭据管理器Windows凭据→查找git:https://github.com编辑→在密码处使用GitHub个人访问令牌替换密码→完成

如果找不到git:https://github.com→单击添加通用凭据→Internet地址将是git:https://github.com,您需要输入用户名和密码将为您的GitHub个人访问令牌 →单击“确定”即可完成


对于macOS

单击菜单栏右侧的聚光灯图标(放大镜),然后键入密钥链访问,按Enter键启动应用程序→在Keychain Access中,搜索github.com→查找github.comInternet密码条目→相应地编辑或删除该条目→完成


对于基于Linux的操作系统

对于Linux,您需要使用用户名配置本地GIT客户端和电子邮件地址。

$ git config --global user.name "your_github_username"
$ git config --global user.email "your_github_email"
$ git config -l

一旦配置好GIT,我们就可以开始使用它来访问GitHub。 例如:

$ git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY
> Cloning into `YOUR-REPOSITORY`...
Username: <type your username>
Password: <type your password or personal access token (GitHub)

现在将给定的记录缓存在您的计算机中以记住令牌:

$ git config --global credential.helper cache

如有需要,您可以随时通过以下方式删除缓存记录:

$ git config --global --unset credential.helper
$ git config --system --unset credential.helper

现在尝试使用-v选项进行拉取以进行验证

$ git pull -v

Linux/Debian (克隆方式如下):

git clone https://<tokenhere>@github.com/<user>/<repo>.git
如果您正在使用 PhpStorm,请转到菜单 Gitpull,并选择通过 个人访问令牌 进行身份验证。输入您的 PAT,这将允许您拉取/推送更改。

30
请务必将令牌保存在本地文件或云中。点赞。 - Goran_Ilic_Ilke
17
考虑到原贴作者表示他们已经两周前创建了一个令牌,这并没有解决实际问题。 - 9769953
8
当我克隆我的仓库时,它没有要求我输入令牌,那么我该怎么继续呢? - Prhyme
11
和@Prhyme有同样的经历。我无法让git提示我输入用户名和密码,即使尝试克隆私人仓库、推送到仓库等操作。当我尝试推送到一个仓库时,它仍然会给出“不支持密码身份验证”的消息,而不提示任何内容。 - SeanRtS
70
在 Mac 上首次将代码推送到您的代码库时,当提示您输入密码时,请输入访问令牌(access token)。这将把令牌添加到密钥链中,并且不会再次提示您输入密码。 - Dhiraj Himani
显示剩余45条评论

570
如果您使用的是 macOS,只需按照以下步骤操作:
1. 前往this link:(个人资料 -> 设置 -> 开发者设置 -> 个人访问令牌)。(不要前往存储库设置;这是您的个人资料设置)
2. 生成一个新的令牌并将其复制粘贴到安全的地方。
3. 现在在您的 Mac 上搜索一个名为“Keychain Access”的应用程序。
4. 搜索“github.com”(如果有多个 GitHub 登录,则选择“类型:Internet 密码”),双击它。
5. 单击“显示密码”,然后输入您的 Mac 密码并按下Enter键。
6. 现在密码应该可见。现在,只需粘贴您在第2步生成的令牌,然后点击“保存更改”。
就是这样。祝您使用愉快!
如果您使用的是 Windows:
  1. 按照上述步骤1和2进行操作。
  2. 在您的Windows操作系统中搜索一个名为Credential Manager的应用程序,然后选择Windows Credentials
  3. 搜索github.com并使用您在GitHub上生成的token编辑密码。 现在尽情享受吧!

开发者的技巧(简码):

git remote set-url origin https://<githubtoken>@github.com/<username>/<repositoryname>.git

克隆时:
git clone https://<username>:<githubtoken>@github.com/<username>/<repositoryname>.git

它可以在任何操作系统上运行(Mac、Windows或Linux)。

缺点:您必须记住或应该需要在本地对每个存储库执行此操作。因此,我建议大家使用上述步骤。

注意:

对于那些没有这个条目的人:可以创建一个。一种方法是克隆一个项目。然后它会要求您输入用户名和密码。而不是密码,请提供令牌,然后就会创建该条目。


64
对于我(Mac)来说,没有这样的条目。 - DarkNeuron
3
我发现在Windows系统中,必须删除凭据管理器中已有的凭据。然后,下次尝试执行git push操作时,它会提示输入个人访问令牌。简单地重置现有凭据是不起作用的。 - J. Peterson
4
“saved my day”意为“救了我的一天”,“developer heck shortcut”指的是“开发者快捷键”,“just removed old remote url and added new one”可以翻译为“只需移除旧的远程网址并添加新的网址”,这段话表达的意思是:“开发者快捷键真是太好用了,我只需要在电脑上移除旧的远程网址并添加新的网址就解决了问题(我使用的是Mac系统,但我相信其他操作系统也是如此)。” - Inzamam Malik
37
对于没有这个入口的人:应该创建它。一种方法是克隆一个项目,然后会要求你输入用户名和密码。而不是输入密码,请提供令牌,然后入口将被创建。 - Learner
2
在终端屏幕上使用生成的令牌作为Github密码。 - Ramazan Sağır
显示剩余14条评论

373

使用我的帐户设置开发者设置个人访问令牌生成新令牌

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

15
请注意,似乎需要在每个存储库中运行此命令,才能使用新凭据重置该存储库。希望有一种全局解决方案。 - SeanRtS
17
这个对我完美地起作用了。得到最多票数的那个并没有起作用。 - Kapilfreeman
5
谢谢!将令牌用作密码不起作用,但添加这个非常有效。 - Syorito Hatsuki
12
这非常不安全,不仅允许具有读取本地仓库权限的任何本地系统用户控制该仓库,而且 git remote -v 命令会直接暴露密钥,使攻击者能够完全访问您的 GitHub 账户。 - Joshua Kolden
6
@ßãlãjî 操作系统的密钥管理器和浏览器都极力保护凭证的安全性。普通的 Git 工作流程不会将密码或 SSH 私钥暴露给其他有读取权限的仓库用户。而上述建议则会让任何有读取权限的本地仓库副本用户(例如共享的工作或学校文件系统用户)都能够看到用户明文的个人访问令牌。这也适用于归档的副本,例如保留了“.git”目录的源代码 Tarball 文件。 - Joshua Kolden
显示剩余8条评论

217

对于Linux,这些简单的步骤可以解决您的问题

  1. 如果您的Git密码被缓存在credential.helper中,请取消设置:

git config --local --unset credential.helper

或者,如果您已经在全局范围内设置了凭据:

git config --global --unset credential.helper
  • 现在前往你的GitHub账户设置

    图片描述

  • 点击开发者设置

    图片描述

  • 选择个人访问令牌

    图片描述

  • 使用给定的权限生成一个令牌,例如:

    图片描述

  • 现在在Git存储库中执行git pull

  • 提供用户名和生成的令牌作为密码

  • 图片描述

    这是一个简单明了的解决方案,按步骤操作即可。

    PS:如果您对Git反复要求用户名/令牌感到烦恼,请按照以下三个简单步骤操作

    • 运行nano ~/.git-credentials。删除GitHub行并保存。

    • git config --global credential.helper store

      风险较高,因为令牌实际上存储在文件~/.git-credentials

    • 运行git pull并只提供用户名和密码一次

    现在它不会再次询问用户名和访问令牌了!


    4
    这些权限真的很多。你是用这个令牌做什么的? - Bergi
    1
    这完全取决于您想要使用该令牌的用例。因此,请根据您的用例选择相应的权限。 - Umar Hayat
    1
    只有在我遵循这个时它才起作用。 - ScottyBlades
    1
    不要使用权限进行那样的操作。 - Leandro Bardelli
    这是完美的答案。它也对我起作用了。 - Devendra Singraul
    显示剩余4条评论

    202

    GitHub已对密码认证进行了更改。如果您正在尝试使用用户名和密码访问Git,则不允许这样操作。因此,请使用个人访问令牌来代替密码,在任何地方访问Git。

    以下是生成个人访问令牌的步骤。

    单击此处获取令牌 - https://github.com/settings/tokens

    第1步 - 打开GitHub并使用您的凭据登录。

    第2步 - 单击设置菜单。

    第3步 - 在设置菜单中,单击开发人员设置

    第4步 - 从开发人员设置菜单中,单击个人访问令牌

    第5步 - 在个人访问令牌中,单击生成新令牌按钮。

    第6步 - 现在填写所需的详细信息,例如备注、过期时间、选择范围,然后单击生成令牌按钮。

    第7步 - 之后,将生成一个新令牌。复制生成的令牌并使用该令牌来使用用户名和令牌访问Git。

    如果您正在使用Windows操作系统,请按照以下步骤操作。

    打开控制面板用户帐户管理您的凭据Windows凭据

    这会显示所有通用凭据。找到您的 GitHub URL,然后单击它。现在单击编辑按钮。然后将从GitHub生成的个人访问令牌添加到密码字段中。最后单击保存按钮。

    现在您可以访问 Git。

    如果您正在使用 Android Studio 访问 Git,并要求输入密码,请在任何地方添加 GitHub 个人访问令牌 而不是密码。


    4
    你是我的英雄。起初我使用凭据管理器时,因为正确的GitHub URL是git:https://gitshub.com而不是github.com/username,使得它无法正常工作。希望这能对某些人有所帮助。我认为GitHub的仇恨是没有界限的。 - user13548229
    5
    基本上,密码应该在每个地方被 Git 令牌替换。 - AdityaKapreShrewsburyBoston
    如果我正在使用Linux命令行呢?编辑:答案:只需将令牌用作密码即可... - 3xCh1_23
    2
    @Lars Wissler 非常感谢,你救了我!git:https://github.com 的确是正确的地址。 - Blue Phoenix
    我已经更新了个人访问令牌,然后在 Visual Studio Code 中使用相同的“访问令牌”更新密码。这对我有效! - wilfredonoyola
    显示剩余2条评论

    106
    这个消息的意思是,您正在使用密码而不是个人访问令牌来通过HTTPS访问GitHub,这已不再被允许。 GitHub已禁用密码验证,因为人们经常会意外泄漏他们的密码,而个人访问令牌可以受限制以减少损害,但密码则不能。如果您没有明确输入密码,则很可能您有一个凭证管理器,该管理器会保存您的密码并在未提示您的情况下发送它。您可以按照Git FAQ中列出的清除凭证管理器的指示进行操作。
    $ echo url=https://account@github.com | git credential reject
    

    您应该使用相同的URL,但将account替换为您自己的用户名(例如,在我的情况下,它看起来像是echo url=https://bk2204@github.com)。

    接下来,当您尝试推送或拉取时,Git 将提示您输入用户名和密码。对于用户名,请输入您的 GitHub 用户名,并在密码字段中生成一个新的个人访问令牌(可在相应的设置页面上完成)并将其粘贴到密码字段中。如果您正在使用命令行工作,则可能看不到任何指示表明密码已成功粘贴;这是正常现象,因此只需按下Enter即可。

    这样将保存个人访问令牌到您的凭据管理器中,以便下次使用,假设您设置了凭据管理器。如果您不确定是否已设置凭据管理器,请运行git config credential.helper并查看是否有任何输出。

    如果您没有设置凭据管理器,则应该添加一个,以便无需记忆您的令牌。根据操作系统运行以下命令之一:

    • 在 Windows 上,运行 git config --global credential.helper manager
    • 在 macOS 上,运行 git config --global credential.helper osxkeychain
    • 在 Linux 上(如果可用)运行 git config --global credential.helper libsecret;或者
    • 如果libsecret不可用,则在 Linux 上运行 git config --global credential.helper store

    然后,您可以再次尝试推送或拉取,直到不再提示为止。


    1
    谢谢提供的信息,我刚刚测试了 git config --global credential.helper osxkeychaingit config --global credential.helper 但是在我的控制台中没有任何反应,所以我将尝试第一个解决方案。只有一个问题,url=https://account@github.com 是什么?是我的存储库链接还是我的 GitHub 链接? - Daemes
    3
    请查看 https://dev59.com/IsHqa4cB1Zd3GeqP6sKb#68776344,在Mac上更改GitHub密码。 - Evan
    2
    我上面提到的技巧可以清除任何系统上的密码,因此Git会再次提示输入密码。这就是为什么我们在常见问题解答中记录了它,因为每个操作系统和凭据助手的指示都不同,而且当涉及GUI时,很难编写适用于所有系统的单个答案。 - bk2204
    2
    echo url=https://account@github.com | git credential reject 正是我所需要的。谢谢! - Nolan Strait
    这是解决问题的方法,谢谢!显然,根据众多提醒,我已经做得很正确了,但实际上没有地方说明如何开始使用令牌... - JoonasD6
    显示剩余2条评论

    69

    最简单的解决方案(2022年5月):

    1. 个人访问令牌处创建一个新的令牌
    2. 复制令牌(Windows: Ctrl + C,macOS: Cmd + C,或点击复制图标)
    3. 尝试推送您的本地存储库:git push
    4. 输入您的 GitHub 用户名
    5. 将令牌粘贴为您的密码

    太好了,这为我节省了很多时间! - NeeK
    我无法确认这是所有所需的,但很可能是。您看,根据上面的答案,我将PAT放入了Keychain Access(Mac)中,然后在我的“git clone”命令期间,在提示输入密码时将PAT粘贴到了命令行中。也许我不需要将PAT放入Keychain Access中。我可以说,如果我再次克隆,我将不会被要求进行身份验证。如果这个答案是所有需要做的事情,那么这就是最好的答案。 - steve

    43

    在GitHub中从设置开发人员设置生成访问令牌。

    如果您以前克隆了存储库并将其作为origin,则可以更改身份验证方式,因此:

    git remote set-url origin https://<token>@github.com/<username>/<repo>.git
    
    如果您要在2021年8月13日之后克隆存储库,则可以使用普通的克隆命令,并将生成的访问令牌设置为密码字段。

    应该是 "<repo>.git"。 - G.Vanem
    1
    如果你和我一样,有多年使用基于密码的身份验证的git存储库。我已经做了这个:find . -type f -path '*/.git/*' -name 'config' -exec sed -i 's%https://github.com/%git@github.com:%g' {} \;它将递归搜索.git文件夹中名为config的任何文件,并查找并替换https URL为git@github。我建议只在简单的存储库上执行此操作,其中您知道您拥有纯净的远程。我还没有测试它在不同设置下的工作方式。你的情况可能会有所不同! - robmsmt
    我尝试删除用户名,它起作用了: git remote set-url origin https://<token>@github.com/<repo>.git - doubleo46

    34

    对于 Ubuntu,请按照以下步骤进行:


    24

    一行命令解决方案

    如果你的电脑没有将SSH密钥添加到GitHub账户中,我会在答案结尾处为你提供添加密钥的说明。你需要先进行此步骤。

    当推送失败后,执行以下操作:

    git remote set-url origin git@github.com:{user_id}/{project_name}.git
    

    然后再次推送即可解决问题。

    接下来我将展示我的情况。
    (并且我会指导你如何处理你的情况。)

    首先,当我添加、提交和推送时,遇到了这个问题:

    输入图像描述

    然后,我的当前Git日志如下所示。

    输入图像描述

    最后,这是我解决问题的方法。

    输入图像描述

    在我的案例中,

    1. {project_name} <-> open-idea-pool

    2. {user_id} <-> milochen0418

    3. {branch_name} <-> master

    (你的branch_name可能是main,而不是master

    当我推送失败时,我需要的唯一命令是:

    git remote set-url origin git@github.com:{user_id}/{project_name}.git
    

    然后我通过以下方式再次推送它:

    git push -u origin {branch_name}
    

    就我的案例举个例子,

    git remote set-url origin git@github.com:milochen0418/open-idea-pool.git
    git push -u origin master
    

    它有效。

    -- 顺便说一下,这是创建用于GitHub账户的SSH密钥的过程。

    您可以参考这两个链接来完成。这里的信息支持Mac、Windows和Linux系统。

    1. 添加 SSH 密钥到 GitHub 时出现问题
    2. 将新的 SSH 密钥添加到您的 GitHub 账户中

    此外,如果您想要克隆一个新项目,您可以执行以下命令:

    git clone git@github.com:{user_id}/{project_name}.git
    

    3
    我敢打赌这只能工作,因为你已经在Github账户中添加了SSH密钥。 - HolyBlackCat
    1
    也许在回答中加入创建SSH密钥的过程? - HolyBlackCat
    非常感谢。我明天会添加一些创建SSH密钥的简单步骤。GitHub官方文档也介绍了如何操作,但对于初学者来说可能太复杂了。 - Milo Chen
    我已经参考了两个优秀的链接,成功添加了创建SSH密钥到Github账户的过程。 - Milo Chen
    1
    建议使用 ssh 而不是使用 用户名/密码(token) 的方法。好的建议。使用 git@github.com:<repo_url> 代替 https://github.com/<repo_url> - Francois
    请查看 *为什么在提问时不上传代码/错误的图片?(例如,"只有在其他方式无法清晰表达问题时才应使用图片,例如提供用户界面的截图。"*)并做正确的事情(它也涵盖了终端会话)。提前致谢。 - Peter Mortensen

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