密码认证因停电而暂时禁用,请使用个人访问令牌代替。

243

我之前一直使用用户名密码推送我的代码,几个月来都能正常工作。但是突然间无法推送并出现了以下错误:

Username for 'https://github.com': shreyas-jadhav
Password for 'https://shreyas-jadhav@github.com':
remote: Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead.
remote: Please see https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/ for more information.

请注意,链接没有帮助。即使使用生成的令牌也无济于事。

版主提示:这是GitHub计划中即将永久性服务变更的一部分


4
GitHub将移除用户名密码身份验证,从现在开始您需要使用令牌(Token)。 - Liam
21
阅读该网页基本上告诉您所有这些内容。 - Liam
20
我有同样的问题,但那个页面并没有帮助。问题在于,即使使用生成的令牌作为密码,仍会出现相同的错误消息。 - Narann
15
为什么会用到“brownout”这个词? - Ross Presser
7
“Brownout”是指电力损失部分而非全部的情况。这个词源于白炽灯泡时代,当电力损失少许时,灯泡会明显变暗。在此语境下,GitHub正在“降低亮度”,以告知用户服务即将有所改变(即密码很快将完全停止使用)。 - Machavity
显示剩余17条评论
25个回答

175
  1. 从GitHub的开发者设置生成新令牌。

  2. 更新远程URL:

git remote set-url origin https://<token>@github.com/<Git_URL>
  • 拉一次:

    git pull https://<token>@<Git_URL>.git
    
  • 然后你就可以开始了。


    1
    尝试使用Github CLI -> https://cli.github.com/。它可以执行删除操作,您只需要进行OAuth即可。 - Amir Saleem
    16
    <git_url> 是什么? - Ahmed4end
    28
    在我看来,这不是一个好的解决方案。问题在于PAT会以明文形式存储在远程URL中。因此,如果有人能够访问远程URL,他们就可以使用您的PAT做任何事情。令牌应该安全地存储在钥匙串或类似的东西中。编辑:我特别指的是第3步,在这一步中,您将PAT作为前缀添加到远程URL中。 - Kurtis Jungersen
    8
    大家好,你可以设置远程仓库的 URL,而不是移除并添加它。 请使用以下指令:git remote set-url <remote name> https://<token>@github.com/<git_url> - Leon
    5
    没有所谓的“git dev settings”。我期望一个获得金徽章的回答者知道git和GitHub之间的区别。 - Eric Duminil
    显示剩余15条评论

    143

    先前被接受的答案,Kusal Shrestha的,可以完成工作,但不安全,因为我们以明文形式存储令牌。

    在我的诚实意见中,将其存储在钥匙串中是更好的方法。

    对于Visual Studio Code,请阅读crg的答案

    对于Windows:

    你可以尝试下面@Venryx的注释,但我还没有测试过。


    对于Mac:

    我现在刚遇到这个问题

    Enter image description here

    如建议所示,我进入了开发设置,并生成了一个令牌

    然后我去了我的Mac中的钥匙串访问:

    Enter image description here

    我删除了GitHub的所有行

    Enter image description here

    现在我进入终端并提交虚拟代码

    git push
    

    终端要求我输入我的账户电子邮件和密码。

    我输入了我的电子邮件,对于密码,我输入了之前生成的令牌。

    输入图片描述 here

    然后它又开始工作了。


    3
    在Windows上,使用“凭据管理器”而不是“钥匙串访问”。此外,请确保您使用的是“PowerShell”而不是命令提示符,否则会出错。有关完整说明,请参见此处:https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192394 - Venryx
    1
    Github应该将此帖子添加到其文档中。 - Luke Schoenberger
    2
    您无需删除钥匙串,只需编辑密码并添加令牌即可。 - Pietro Nadalini
    该方法将替换您在github.com上的Safari登录凭据,这可能会破坏未来的第三方oauth批准,具体取决于令牌权限。 - Joshua Kolden

    45

    macOS解决方案

    我只需按照以下说明操作,问题就得到了解决。

    1. 为GitHub生成个人访问令牌。生成令牌的过程
    2. 打开你的 钥匙串访问
    3. 搜索 github.com 并双击。
    4. 使用你最近生成的 密钥 更新 密码

    注:我不确定这对其他操作系统的用户是否适用。


    在Windows上,使用“凭据管理器”而不是“钥匙串访问”。请注意,您可能还需要更改git的“origin”以包括您的用户名(否则会出错,至少对我来说是这样)。有关完整说明,请参见此处:https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192394 - Venryx
    这个对我在macOS上有效 https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192584 - crg
    这个解决方案是8月13日之后唯一有效的解决方案。在我的情况下,更新远程URL解决方案并没有起作用。 - user1791914

    36

    这里有一个简单的解决方案:

    • 前往GitHub → 设置开发者设置个人访问令牌。重新生成您的令牌并将其复制。
    • 在任何本地存储库上,git push时,输入您的用户名,密码为生成的令牌

    与每个HTTPS Git操作手动输入您的令牌不同,您可以使用Git客户端缓存您的令牌。

    • 在终端中输入以下内容:
    # Set Git to use the credential memory cache
    git config --global credential.helper cache
    
    • 要更改默认密码缓存超时时间,请输入以下内容:
    # Set the cache to timeout after 1 hour (setting is in seconds)
    git config --global credential.helper 'cache --timeout=3600'
    

    2
    这是最好的答案......但还需要一个额外的步骤。在此之前,我必须执行“git config --unset credential.helper”...然后我输入“git config --global credential.helper cache”,然后就可以了。我不得不最后一次输入我的用户名/新密钥......然后就可以了。 - user2662680
    1
    "密码是生成的令牌" 这就是我所缺失的部分! - Jaggler3

    26

    Github已禁用密码验证,不再支持。请使用个人访问令牌(PAT)代替密码。

    操作步骤:

    1. 从钥匙串中删除Github存储的凭据。(例如,在Mac上使用“Keychain Access”,或在Windows上使用“Credential Manager”)
    2. 从Github生成访问令牌:设置开发者设置个人访问令牌生成新令牌
    3. 保存令牌-因为它只会出现一次
    4. 运行命令git fetch(如果不需要权限,则运行git push

      如果在Windows上,请务必从PowerShell中运行此命令,而不是命令提示符(CMD)。尽管输入相同,但命令提示符始终会出现“remote: Password authentication is temporarily disabled”消息。

    5. 它将要求您输入用户名和密码。

      如果它没有要求您输入用户名和密码,您必须更改Git远程URL以包含您的用户名https://USERNAME@github.com/repo-owner/repo-name.git(有关更改远程URL的说明,请参见方法2)

    6. 在要求输入密码时,使用访问令牌代替密码(您将需要输入两次)

    或者第二种方法:

    1. 从Github生成访问令牌:设置开发者设置个人访问令牌生成新令牌
    2. 本地更新origin的URL:git remote set-url origin https://<token>@<git_url>.git
    3. 拉取一次:git pull https://<token>@<git_url>.git

    1
    这对我刚刚起作用了,不确定为什么它正在被投票降低。 只需使用下面指南中的访问令牌,与您通常的 GitHub 用户名一起使用,而不是密码。https://docs.github.com/cn/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token - Lewis
    我认为第一步是最重要的。如果你跳过它,错误仍然会出现。 - Kino
    4
    甚至更好的是,SSH密钥 - user253751
    注意:上述方法对我有效,但仅在PowerShell中运行时有效。当我从普通的命令提示符运行它时,每次都会失败。(我已经确认了这个问题5+次) - Venryx
    1
    我做了更多的测试,发现另一个条件:上述方法(#1)仅在Git网址包含您的用户名时有效。例如,这个可以运行:https://ME@github.com/ME/my-repo.git 但是这个不行:https://github.com/ME/my-repo.git - Venryx

    19

    可在 macOS、Windows 和 Linux 上使用

    解决方案 1

    1. 删除现有的代码库(如果您有任何当前更改,请备份):

    mv my-repo my-repo.backup
    
  • 创建一个SSH密钥并将其添加到GitHub(参见GitHub文档)。

  • 克隆SSH存储库:git clone git@github.com: group / repo-name.git

  • 解决方案2推荐使用的解决方案

    1. git remote remove origin

    2. 您必须添加访问令牌(请参见GitHub文档以生成令牌)。

    3. git remote add origin https://<token>@<git_url>.git

    4. git pull https://<token>@<git_url>.git

    使用Visual Studio Code

    1. 删除您的GitHub访问权限:
    git credential-osxkeychain erase
    ⏎  host=github.com
    ⏎  protocol=https
    
    1. git pushgit pull

      它将提示您一个模式对话框。 点击允许并按照流程操作。


    2
    使用新的个人令牌删除并重新添加源对我有用。https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192528 - Kusal Shrestha

    16

    如果您使用的是 macOS

    1. 首先请删除钥匙串中所有 GitHub 凭据,然后生成您的令牌用作密码(由于 GitHub 安全策略):GitHub* → 设置开发人员设置个人访问令牌

    2. 尝试将最新的内容推送或拉取到/从您的存储库。然后 Git 将要求您输入用户名和密码。输入您的用户名和来自 GitHub 的生成令牌。


    GitHub指南:https://docs.github.com/en/get-started/getting-started-with-git/updating-credentials-from-the-macos-keychain - Arnold Oosterom
    2
    或者,在钥匙串访问应用程序中搜索“github”,并找到Kind列为“Internet Password”的条目(您可能有“Web form password”条目,但终端不使用这些)。双击该条目进行编辑。勾选“显示密码”框。将密码替换为GitHub令牌。单击“保存更改”。现在您应该能够像以前一样完成所有操作了。希望这有所帮助。 - Hunter
    需要注意的是,这里有两个“隐藏条件”才能使其正常工作:1)您的git远程url必须包含您的用户名,例如 https://USERNAME@github.com/...,2)在Windows上,您必须使用PowerShell而不是命令提示符。更多细节请参见此处:https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192394 - Venryx
    这对我在MacOS Intel和M1上有效 https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192584 - crg

    12

    我尝试了各种方法,最终它对我起作用了。因为这个错误,我无法推送到我的仓库,所以请至少尝试一次!

    _____________________________生成个人访问令牌:

    1. 点击此处并生成个人访问令牌。非常简单。

      https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token

      现在只需使用PAT而不是用户名和密码将其推送即可___________________

    2. 要将更改推送到您的仓库:

      git push https://[Personal Access Token]@github.com/[User Name]/[Repository Name].git
      

    2
    这个解决方案最好,因为我在Linux服务器上,而Windows和Mac的钥匙串不可用。 - thus__
    2
    这在我的Windows 10上有效。感谢您留下这个。简单明了。GitHub应该在文档中包含类似的内容。 - Adam391
    @Adam391 先生,这是一个巨大的赞美!谢谢!!!! - Saikat Mukherjee

    10

    如果您正在使用HTTPS

    • 根据文档中的说明,在您的令牌设置中生成一个令牌。

    • 如果存储库已存在,则必须按照以下格式更改远程URL:https://<username>:<token>@github.com/<repository_url>

    git remote remove origin
    git remote add origin https://<USERNAME>:<TOKEN>@<GIT_URL>.git
    git pull # Verify
    
  • 如果您克隆您的代码库

  • git clone https://<USERNAME>:<TOKEN>@<GIT_URL>.git
    

    7

    2
    注意:如果您已经设置了git以从系统凭据管理器而不是硬编码条目中读取,则此方法将无效。不幸的是,git不会警告您,因此只是静默失败,因为它使用过时的凭据管理器条目而不是上面命令添加的新访问令牌。要将访问令牌添加到系统凭据管理器,请参见此处:https://dev59.com/gVEG5IYBdhLWcg3wT55R#68192394 - Venryx

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