Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead

我使用用户名密码来推送我的代码。它工作了几个月,但突然我不能这样做,并得到以下错误:

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计划的一部分,很快就会永久改变服务

121921 次浏览

我今天下午遇到了这个问题,并通过将参考文献3中所述的GitHub密码替换为参考文献2中生成的令牌来解决这个问题。

  • 参考1:参见< a href = " https://github。blog/2020-07-30 Token -authentication-requirements-for- API -and- Git -operations/" rel="nofollow noreferrer"> API和Git操作的Token认证要求 . log/2020-07-30 Token -authentication-requirements-for- API -and- Git -operations/" rel="nofollow noreferrer。不再支持该密码。

  • 所以你应该用本教程生成一个令牌,并用它代替你的密码作为凭证。

  • 如果你没有提示输入你的用户名和密码,你的凭证可能被缓存在你的电脑上。您可以更新密钥链中的凭据,用本教程中描述的令牌替换旧密码。

GitHub已禁用密码认证,且不再支持密码认证。创建并使用个人访问令牌 (PAT)来代替密码。

以下步骤:

  1. 从密钥链中删除GitHub存储的凭据。(例如,使用“Keychain Access"在Mac上,或“凭据管理器”;在Windows上)
  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. 当它要求输入密码时,使用访问令牌而不是密码(你必须输入两次)

或者第二种方法:

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

  2. 更新远端URL:

    git remote set-url origin https://<token>@github.com/<Git_URL>
    
  3. < p >拉:

    git pull https://<token>@<Git_URL>.git
    

这样就可以开始了。

适用于macOS, Windows和Linux

解决方案1

  1. 删除现有的存储库(如果您当前有任何更改,对其进行备份):

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

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

解决方案2 (推荐解决方案)

  1. < p > git remote remove origin

  2. 你必须添加一个访问令牌(参见GitHub的文档生成一个令牌)

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

  4. < p > 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

    它将提示您一个模态对话框。单击< >强允许< / >强并遵循该过程。

Ubuntu服务器和现有Git存储库的解决方案

删除密码:

git config --global --unset user.password;
git config --local --unset user.password;

改变remote.origin.url。替换& lt; username>通过你的GitHub用户名:

git config --global --replace-all remote.origin.url "https://<username>@github.com/PPEProjects/smile-eyes-be.git";
git config --local --replace-all remote.origin.url "https://<username>@github.com/PPEProjects/smile-eyes-be.git"

拉/推

git pull
git push origin HEAD:develop

输入从个人访问令牌生成的个人访问令牌。

如果你用的是macOS

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

  2. 试着从你的存储库中推送或拉出一些最新的东西。然后Git会询问您的用户名和密码。输入您的用户名和从GitHub生成的令牌。

macOS解决方案

我只是按照下面的说明,这就解决了我的问题。

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

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

如果您使用的是HTTPS

  • 在你的令牌设置中生成一个令牌,如的文档所示

  • 如果存储库已经存在,则必须按照https://<username>:<token>@github.com/<repository_url>的格式更改远程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
    

之前接受的答案Kusal Shrestha's可以完成这项工作,但它并不安全,因为我们将令牌存储在纯文本中。

在我看来,将它存储在钥匙链中是更好的方法。

对于Visual Studio代码请阅读中国中铁的回答

Windows:

你可以试试下面的@Venryx评论,但我还没有测试过。


Mac:

我现在才面对这个问题

Enter image description here

正如建议的那样,我去使用此URL进行开发设置并生成了一个令牌。

然后我进入我的Mac的钥匙链访问:

Enter image description here

我删除了(所有)行的GitHub

Enter image description here

现在我去终端输入了虚拟代码

git push

终端要求我输入我的邮箱和密码。

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

Enter image description here

然后它又开始工作了。

  1. < p > 创建个人访问令牌

  2. 在你的Visual Studio代码命令行中:

    git config --global credential.helper [YOUR_TOKEN]
    

GitHub正在取消用户名密码认证

其他人提到的另一种方法:

你可以安装和配置GitHub CLI。最好使用OAuth进行设置。不需要手动从密钥链中删除凭据。

在有家酿 (brew)的macOS上,安装甚至更简单:

运行brew install gh并执行以下命令:

  1. 您想登录哪个账户? GitHub.com,选择GitHub
  2. Git操作的首选协议是什么?选择HTTPS
  3. 用你的GitHub凭证验证Git ?选择是的
  4. 您想如何验证GitHub CLI?选择用网络浏览器登录
  5. 复制终端->B7C1-8E67
  6. 输入在浏览器中打开github.com
  7. 使用浏览器验证身份

完成了。

开始像往常一样使用Git命令。

快速修复

转到个人访问令牌并重新生成最后一个令牌:

Enter image description here

如果你使用的是HTTPS版本而不是SSH版本,那么这个错误将会出现,因为GitHub正在删除HTTPS方法来维护存储库。

  1. 如果你还没有通过ssh-keygen生成一个SSH密钥,并继续敲击输入直到结束
  2. cat ~/.ssh/id_rsa.pub -复制结果
  3. 访问https://github.com/settings/keys
  4. 新的SSH密钥并将键粘贴到文本框中。标题可以是任何你想要的
  5. cd <into your project's directory>
  6. git remote set-url origin git@github.com:<username-here>/<repository-name-here>.git

你可以开始了!

下面的步骤对我来说非常有效

以下步骤:

  • 从GitHub生成一个访问令牌,设置开发人员设置个人访问令牌生成新令牌

  • 保存令牌-因为它只在那里可用一次

  • 在系统中搜索.git-credential文件

    .

  • 在该文件中用户名后面使用访问令牌而不是密码。

    .

第一个来自帖子:< a href = " https://github。blog/2020-07-30 Token -authentication-requirements-for- API -and- Git -operations/" rel="nofollow noreferrer"> API和Git操作的Token认证要求 . log/2020-07-30 Token -authentication-requirements-for- API -and- Git -operations/" rel="nofollow noreferrer,它说

2021年年中-所有经过身份验证的Git操作都需要个人访问或OAuth令牌。

所以你需要使用个人访问令牌 (PAT)来push:

1获取您的个人访问令牌

在这里登录以访问存储库并添加一个新的个人访问令牌:个人访问令牌。生成一个并保持令牌的安全(离开后无法显示它)。

(在Android工作室中,您需要获得"repo", "gist"的许可;和“阅读:org")

2使用个人访问令牌进行推送

在你得到令牌之后,你可以用如下命令:

git push https://[personal access token]@github.com/[user name]/[repository Name].git

你所要做的就是使用一个生成的令牌而不是传统的密码:

使用密码的旧方法:

git clone https://github.com/username/repo.git


Username: your_username
Password: your_password

使用令牌的新方法:

git clone https://github.com/username/repo.git


Username: your_username
Password: your_token

步骤1:从GitHub生成一个API令牌

步骤2:用新生成的令牌替换以前缓存的密码

  • 正如这里回答的,你必须修改你的本地GitHub登录凭证缓存在你的pc: 从Git中删除凭证 < / em >

你可以通过GitHub仪表板生成你的帕特(个人访问令牌)。

  • 步骤1:登录您的GitHub帐户。

  • 第二步:在任意页面的右上角单击头像,单击“设置”。

  • 第三步:在左侧栏中,单击开发人员设置

  • 第四步:在左侧栏中,单击个人访问令牌

  • 5 .单击“生成新令牌”。

  • 第六步:给你的令牌一个描述性的名字。

  • 步骤7:选择范围或权限。您想授予这个令牌。要使用令牌从命令行访问存储库, 选择回购。< / p >

  • 第八步:单击“生成令牌”。

复制您的令牌到一个安全的位置,因为一旦您离开该页面,您将无法检索它,除非您创建一个新的。

下面是一个简单的解决方案:

  • 进入GitHub→设置开发人员设置个人访问令牌。重新生成令牌并复制它。
  • 在任何本地存储库上,当git push时,输入您的用户名和Password是生成的令牌 . c

你可以用Git客户端缓存令牌,而不是为每个HTTPS 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'

还有一个非常简洁的脚本,有助于将HTTPS克隆的Git存储库转换为ssh协议,而无需删除和克隆Git存储库:

转换HTTPS GitHub克隆到使用SSH

你不需要拆遥控器。添加一个新的,然后拉(根据已接受的答案)。

对我来说最简单的解决方案(在Linux上)是使用gh auto login并遵循CLI指示。不需要采取进一步措施。

如果你没有gh按照这个链接安装它,取决于你的操作系统。

我试了所有的方法,最后都奏效了。由于这个错误,我无法在我的存储库中推送,所以请至少尝试一次!

<强 >_____________________________ 生成个人访问令牌:< / >强

  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
    

如果你不想以纯文本形式存储你的令牌(通过修改远程回购的URL),你可以这样做:

  1. 通过点击官方链接生成一个新的令牌
  2. 通过单击下面的按钮,确保复制了令牌。如果你双击文本并复制它,它会增加一个额外的空格,你会继续得到相同的错误(即使你不再使用你的密码,但令牌)

enter image description here

当我试图在Visual Studio Code中向上推时,我收到了这个错误…但是我打开了终端,用用户名和密码就没问题了。

也许你可以试试。

这招对我很管用:

  1. 生成个人访问令牌(不要忘记复制令牌)

  2. 打开你的钥匙链访问 (Mac)或证书管理器 (Windows)。

  3. 更新GitHub密码为钥匙链访问/证书管理器中的新个人访问令牌

  4. 最后一步:克隆Git(确保在正确的目录位置克隆存储库)

    git clone https://github.com/username/repo.git
    
    
    Username: your_username
    Password: your_token
    

在我的情况下,它没有提示我输入用户名和密码,因为它已经在钥匙链访问中更新了。