开启GitLab 2FA后如何使用访问令牌执行git pull操作?
问题原因
你遇到的报错是SSH协议鉴权失败,和你已开通的2FA、提前准备的个人访问令牌无关:
- 个人访问令牌仅适用于HTTP/HTTPS格式的Git远程地址鉴权,你当前本地仓库用的是SSH格式的远程地址(
git@gitlab.com开头),自然不会触发用户名+令牌的输入提示 - 你执行命令时加了
sudo,此时调用的是root用户的SSH配置,即便你当前普通用户的SSH密钥已经绑定到GitLab账号,root用户未配置对应SSH密钥的情况下依然会鉴权失败
解决方案
你可以根据自己的使用习惯二选一:
方案1:继续使用SSH协议(无需使用个人访问令牌)
- 先确认你当前普通用户的SSH公钥已上传到GitLab账号的SSH密钥配置列表,未上传的话将本地
~/.ssh/id_rsa.pub(若你自定义过密钥名则替换为对应公钥文件名)的内容粘贴到GitLab的SSH密钥设置页即可 - 优先尝试不加
sudo直接执行git pull,如果提示本地目录无写入权限,先执行sudo chown -R 你的当前系统用户名:你的用户组 本地仓库根目录路径修改目录归属,后续即可直接用普通用户执行git操作 - 若确实需要使用sudo执行git操作,将当前用户的SSH密钥复制到root用户的配置目录即可:
复制完成后再执行sudo cp ~/.ssh/id_rsa /root/.ssh/ && sudo cp ~/.ssh/id_rsa.pub /root/.ssh/sudo git pull即可正常鉴权
方案2:切换为HTTPS协议使用个人访问令牌鉴权
- 先修改本地仓库的远程地址格式,将SSH格式替换为HTTPS格式:
git remote set-url origin https://gitlab.com/你的GitLab用户名/仓库名.git - 执行
git pull,此时会弹出用户名密码输入提示,用户名填你的GitLab登录账号,密码填你提前生成的个人访问令牌即可完成鉴权 - 如果希望后续操作无需重复输入令牌,执行
git config --global credential.helper store,本次输入的凭证会被本地存储,后续操作无需重复填写
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

