如果你在尝试使用 git clone、git pull 或 git push 时,终端突然无情地抛出下面这段鲜红的错误提示,请不要慌张——你绝对不是一个人:
remote: HTTP Basic: Access denied.fatal: Authentication failed for '[https://gitlab.com/](https://gitlab.com/)...'
在现代开发流程中,这是一个极其高频出现的报错。本文将带你从根本上剖析这个错误的原因,并提供涵盖 个人电脑(Windows/macOS) 以及 无图形化界面的 Ubuntu 服务器 的全场景终极解决方案。
🧐 为什么会突然报这个错?
长话短说:时代变了,平台变得更注重安全了。
为了防止由于密码泄露导致的代码库被恶意篡改,主流的代码托管平台(如 GitLab、GitHub 等)已经全面弃用了“直接使用账号和登录密码通过 HTTPS 进行 Git 操作”的传统方式。
当你遇到这个报错时,通常是因为碰到了以下三个雷区之一:
- 你依然习惯性地在终端里输入了你的网页登录密码,而不是个人访问令牌(Token)。
- 你之前配置的 Token 已经过期失效了。
- 你生成的 Token 权限不足(例如缺少了
write_repository权限,导致无法 Push 代码)。
要解决这个问题,我们有两条路可以走:一是拥抱 SSH 密钥(强烈推荐),二是正确配置访问令牌(Token)。
🌟 方案一:改用 SSH 密钥连接(一劳永逸,服务器首选)
无论是在个人电脑还是 Ubuntu 服务器上,配置 SSH 都是最优雅、最安全的解决方案。它能让你彻底告别频繁输入密码或 Token 的烦恼,实现真正的免密丝滑操作。
第一步:在本地或服务器生成 SSH 密钥
打开你的终端(Windows 用户请打开 Git Bash,Mac/Ubuntu 用户直接打开 Terminal),输入以下命令(记得把邮箱替换成你注册 GitLab 的邮箱):
ssh-keygen -t ed25519 -C "your_email@example.com"
💡 贴心提示: 遇到提示时,一路狂按回车键(Enter)即可。强烈建议不要设置额外的密码(passphrase),这样才能实现自动化和纯正的免密操作。
第二步:提取公钥
密钥生成后,你需要查看并复制你的“公钥”。执行以下命令:
cat ~/.ssh/id_ed25519.pub
此时终端会打印出一长串以 ssh-ed25519 开头的字符。将其完整复制下来。
第三步:将公钥交还给 GitLab
- 登录你的 GitLab 网页版。
- 点击右上角头像,进入 Preferences (偏好设置)。
- 在左侧导航栏找到 SSH Keys。
- 点击 Add new key,将刚才复制的那长串代码粘贴到文本框中,点击保存。
第四步:测试连接并修改项目地址
在终端里测试一下 SSH 连通性:
ssh -T git@gitlab.com
(首次连接输入 yes 回车即可,若看到 Welcome to GitLab... 即代表大功告成!)
接下来,进入你报错的项目目录,把旧的 HTTPS 地址替换成崭新的 SSH 地址:
# 进入你的项目目录
cd /path/to/your/project
# 修改远程仓库地址为 SSH 格式 (请将下方地址替换为你项目的实际 SSH 链接)
git remote set-url origin git@gitlab.com:username/project.git
再次执行 git pull,你会发现世界瞬间清静了,代码瞬间拉下来了。
🛠️ 方案二:生成并使用个人访问令牌 Token(HTTPS 备用方案)
如果你所在的公司网络或服务器环境受到严格的防火墙限制(例如封锁了 SSH 专用的 22 端口),导致你只能使用 HTTPS 协议,那么你就必须通过配置 Token 来解决。
第一步:在 GitLab 网页端生成 Token
- 登录 GitLab,进入个人资料设置里的 Access Tokens (访问令牌) 页面。
- 点击 Add new token。
- 起个名字,设置一个较长的过期时间。
- 核心步骤: 在权限(Scopes)选项中,务必勾选
read_repository和write_repository。 - 点击创建后,页面顶端会生成一串字符。立刻复制并妥善保存它!(刷新页面后它将永远消失)。
第二步:配置环境并应用 Token
根据你所处的操作系统环境,让 Git 接受这个新 Token:
💻 Windows 环境:清除旧凭据
Windows 可能会死死抱住你的旧密码不放。你需要手动“失忆”:
- 打开控制面板 -> 凭据管理器 -> Windows 凭据。
- 找到对应的 GitLab 地址,点击 删除 或 编辑。
- 回到终端重试
git pull,当要求输入密码时,直接粘贴你生成的 Token。
🍎 macOS 环境:清理钥匙串
- 按
Cmd + Space调出搜索,打开 钥匙串访问 (Keychain Access)。 - 搜索
gitlab.com,找到对应的应用密码并删除。 - 回到终端重试,输入用户名,密码处粘贴生成的 Token。
🐧 Ubuntu 服务器环境:设置凭据长效记忆
在没有图形界面的 Ubuntu 服务器上,如果每次 git pull 都要手动敲那串乱码一样的 Token,绝对会让人抓狂。我们可以让 Git 把它“背”下来:
- 在终端执行以下命令,开启全局凭证存储:
git config --global credential.helper store
- 进入项目目录,执行拉取命令:
git pull
- 根据提示输入你的 Username,在 Password 提示处,粘贴你的 Token。
只要成功拉取一次,Ubuntu 就会将凭证静默保存在家目录的 .git-credentials 文件中。以后的任何 Git 操作,它都不会再来烦你了。
⚠️ 服务器安全警告:
.git-credentials是明文存储配置的。如果这台 Ubuntu 服务器有其他非信任人员共享登录权限,请谨慎使用该命令,以免 Token 泄露。
总结
当你再次遇到 HTTP Basic: Access denied 时,只需记住两句口诀:
- 能用 SSH 就用 SSH,一次配置,终身免密。
- 只能用 HTTPS 就换 Token,记得清理旧缓存。
希望这篇指南能帮你顺利扫除 Git 权限报错的障碍,让你把宝贵的时间留给真正的代码创作。Happy Coding! 🚀
版权属于:soarli
本文链接:https://blog.soarli.top/archives/998.html
转载时须注明出处及本声明。