使用强制执行 2-FA 的私有 Gitlab 域解决 VS Code PAC

Solving VS Code PAC with a private Gitlab domain that inforces 2-FA

所以我或多或少地搜索了整个互联网来尝试解决这个问题,但我似乎无法深入了解它,我可能是 1. 唯一经历过这个问题的人确切问题 或 2. 唯一不能简单解决的问题。

背景:

在我的 Windows 10 台电脑上使用 VS Code 我在一个强制执行 2-FA 的私有 Gitlab 域上管理我的工作。我通常的工作流程是通过 ssh 密钥进行身份验证,尽管我尽了最大努力,但我仍无法使个人访问令牌正常工作,这就是我想要解决的问题。

我已经将个人访问令牌(在 Gitlab 中检查所有权限)添加到 VS 代码,我的 url 到 Gitlab 实例是 https://gitlab.private.domain/。现在,当我尝试在需要对远程存储库进行身份验证的 VS 代码中执行任何操作 git 操作时,我收到以下错误

git@gitlab.private.domain: Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.

我已经尝试了很多东西,但没有什么可以证明的。非常感谢所有帮助。此外,尝试启动 ssh-agent 以保留我的密码对于我在终端中使用 git 命令的常规工作流程也不起作用。

奖金问题:

在一个使用 go modules 的 Golang 项目中,运行 go get 在一个需要来自 GitLab 域的其他 repos 的版本的包中通过循环 git 凭据管理器弹出窗口询问私有 GitLab 域 https://gitlab.private.domain 的用户名和密码,在输入我的用户名和密码后,凭据 window 可能会失败并显示 401 并弹出相同的提示, 运行 go get -v 没有提供额外的见解

如果错误消息显示 git@your-gitlab-host,则表示它正在尝试使用“git”协议连接到远程,这只是 SSH,但专门用于连接到 git 遥控器。如果您使用的是 HTTP(过去几年在 Gitlab 中并且 Github 需要个人访问令牌而不是您的密码),则不应该如此。

我不确定如何在 VS Code 中检查远程,但是在命令提示符下,您可以从项目目录执行 git remote show origin(或远程称为 origin 以外的任何名称)。如果它看起来像 git@your-gitlab-host.com:group/project.git 那就是 git ssh 协议,那么您的个人访问令牌将无法工作(甚至无法使用)。这就是为什么您收到关于 publickey 的错误,它正在尝试使用您的 ssh 密钥。

要将您的遥控器从 git/ssh 更改为 https,请转到您在 Gitlab 中的项目页面并复制 HTTPS 遥控器(在该页面上,它将是告诉您如何克隆存储库的区域。对于 Gitlab 项目本身 (https://gitlab.com/gitlab-org/gitlab),它是蓝色的“克隆”按钮,然后是“使用 HTTPS 克隆”下的 url。然后切换您的遥控器:

# remove the existing origin:
git remote remove origin # or whatever the name is

# add the new origin with HTTPS
git remote add origin https://your-gitlab-host.com/group/project.git # or whatever you want the remote name to be

那么您的访问令牌应该可以工作了。