使用 GitLab 修复“HTTP Basic: Access Denied”和“Fatal Authentication Failure”错误

所以,前几天我想用我早已遗忘的 GitLab 用于存储和跟踪我对 Linux 手册网站所做的所有自定义的帐户。

我在 GitLab Web 界面上创建了一个新存储库,然后继续推送我个人系统上的目录。

一切都很好,直到我尝试将代码推送到 GitHub 上的远程存储库。 它给了我一个致命的错误,说“xyz 存储库的真实失败”。

这是错误的样子:

[email protected]:~/Documents/Local-Code$ git push -u origin master
Username for 'https://gitlab.com': gitlab_profile_username
[email protected]': 
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://gitlab.com/gitlab_account_username/gitlab_repository/'

如果您遇到类似的问题,让我向您展示如何解决此错误。

使用 GitLab 处理“远程:HTTP 基本:访问被拒绝”错误

提供有关此错误根本原因的一些线索的主线是:

remote: HTTP Basic: Access denied

我为什么这么说? 因为您的 GitLab 存储库使用的是 HTTPS。 它希望在您的系统和存储库之间建立安全连接。

现在,它不应该自动使用 HTTPS 吗? 不! 不再。

GitLab 已更改其策略,现在它希望您使用自己的 SSH 密钥对 GitLab 存储库进行身份验证。

换句话说, 要将代码从本地系统推送到远程 GitLab 存储库,您必须创建一个 SSH 密钥对并将公钥添加到您的 GitLab 配置文件.

我使用的是 Linux,因此最好在 Linux 上遵循这些步骤。 如果您使用的是 Windows 或 macOS,您应该得到提示并检查如何在您的操作系统上执行相同的操作。

首先检查您是否已经有 SSH 密钥:

ls ~/.ssh/id_rsa.pub

如果您没有它,请使用下一部分创建它,否则跳转到此部分之后的部分。

创建 SSH 密钥(如果您还没有)

我使用的是 Ubuntu,所以这些步骤适用于 Ubuntu。 如果您使用的是其他发行版,则步骤可能不同,也可能不同。

打开终端并使用以下命令:

ssh-keygen

你应该看到这样的输出:

Generating public/private rsa key pair.
Enter file in which to save the key (/user_home/.ssh/id_rsa):

按回车键并使用默认选项。 可能会要求您输入密码以保护您的 SSH 密钥。 如果您设置了密码,则每次尝试使用生成的 SSH 密钥建立 SSH 连接时都必须输入密码。 您可能会也可能不会为 SSH 密钥设置密码。

将公共 SSH 密钥添加到 GitLab

如果您在个人计算机上创建了 SSH 密钥,您应该在大多数 Linux 发行版的主目录下的 .ssh 目录中找到它。 使用以下命令显示其内容:

cat ~/.ssh/id_rsa.pub

复制您的公钥的内容。 现在登录到您的 GitLab 帐户,转到用户设置并在左侧边栏中查找 SSH 密钥。 或者,您可以 转到此页面 登录时。

您将看到一个用于添加公钥的字段。 只需在此处粘贴密钥。 给它一个标题,以便轻松识别此密钥属于哪台计算机。 除非您自己做某事,否则 SSH 密钥默认没有到期日期。 因此,请保持到期字段不变。

一切都做完了? 点击添加键按钮。

您可以添加多个 SSH 密钥。 如果您拥有多台计算机,这很正常。

检查您现在是否可以将代码推送到 GitLab

因此,您将 SSH 密钥添加到了 GitLab 配置文件中。 现在情况应该很好。 是时候验证它了。

尝试再次推送您的代码。 看看它是否有效。 通常,如果成功,您应该会看到如下输出:

[email protected]:~/Documents/Local-Code$ git push -u origin master
Username for 'https://gitlab.com': gitlab_account_username
Password for 'https://[email protected]': 
Enumerating objects: 127, done.
Counting objects: 100% (127/127), done.
Delta compression using up to 4 threads
Compressing objects: 100% (122/122), done.
Writing objects: 100% (127/127), 401.30 KiB | 6.37 MiB/s, done.
Total 127 (delta 14), reused 0 (delta 0)
remote: Resolving deltas: 100% (14/14), done.
To https://gitlab.com/gitlab_account_username/gitlab_repository.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

仍然看到错误? 注意 GitLab 配置文件用户名和帐户用户名之间的区别!

我很难学会。

GitLab 有两个用户名:配置文件用户名和帐户用户名。

您可以轻松更改个人资料用户名,而不会产生任何后果。 但是更改帐户用户名可能是灾难性的。

帐户用户名是您将在 GitLab 存储库的 URL 中看到的内容:

https://gitlab.com/gitlab_account_username/repository_name

在从其网站创建新的 GitLab 存储库时,GitLab 建议在个人计算机上的 Git 配置设置中使用配置文件用户名。

我这样做了,并且在将代码推送到存储库时尝试使用相同的配置文件用户名。 不出所料,即使添加了 SSH 密钥,它也被拒绝了:

[email protected]:~/Documents/Local-Code$ git push -u origin master
Username for 'https://gitlab.com': gitlab_profile_username
Password for 'https://[email protected]': 
remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://gitlab.com/gitlab_account_username/gitlab_repository.git/'

所以,诀窍是在这里使用 GitLab 帐户用户名。 当我这样做时,推送到远程 GitLab 存储库是成功的。

它对你有用吗?

好吧,我分享了将代码推送到 GitLab 存储库的经历。 我希望这也能帮助您解决“致命:身份验证失败”错误。

它对你有用吗? 请在评论部分用是或否告诉我。