首页 > 解决方案 > 使用强制 2-FA 的私有 Gitlab 域解决 VS Code PAC

问题描述

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

背景:

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

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

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

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

奖金问题:

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

标签: windowsgitvisual-studio-codegitlabmulti-factor-authentication

解决方案


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

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

要将远程从 git/ssh 更改为 https,请转到 Gitlab 中的项目页面并复制 HTTPS 远程(在页面上,它将是告诉您如何克隆存储库的区域。对于 Gitlab 项目本身(https ://gitlab.com/gitlab-org/gitlab),它是蓝色的“Clone”按钮,然后是“Clone with 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

然后您的访问令牌应该可以工作。


推荐阅读