启用gitlab的二次身份验证后如何使用git命令

时间:2018-08-02 16:41:31

标签: git authentication gitlab

今天,我启用了Gitlab的2因子验证。之后,由于我登录了Gitlab网站,因此我需要使用手机输入一个6位数字加上密码,这很好,它使我感到安全。

但是,当我使用常规操作(例如git clone some-repo.git)时,出现错误:

Cloning into 'some-repo'...
remote: HTTP Basic: Access denied
remote: You must use a personal access token with 'api' scope for Git over HTTP.
remote: You can generate one at https://gitlab.com/profile/personal_access_tokens
fatal: Authentication failed for 'some-repo.git'

然后我尝试使用git pull克隆现有的本地存储库,发生相同的错误。在启用第二因素身份验证之前,上述所有操作都可以正常工作。

按照上述错误的指示,我去了提到的地址:https://gitlab.com/profile/personal_access_tokens。我创建了以下令牌,并保存了令牌的密钥。

enter image description here

但是,我不知道该键如何处理。有人可以告诉我如何使用此键来启用诸如git pullgit clonegit push等基本操作...

编辑

在启用第二因素身份验证之前,我在本地有很多存储库。我也希望它们也能工作。

4 个答案:

答案 0 :(得分:15)

using gitlab token to clone without authentication中所述,您可以使用您的个人访问令牌克隆GitLab存储库,如下所示:

git clone https://oauth2:ACCESS_TOKEN@gitlab.com/yourself/yourproject.git

关于如何更新现有克隆以使用GitLab个人访问令牌,您应该在每个本地git目录中编辑.git/config文件,该文件将具有以下内容:

[remote "origin"]
    url = https://yourself@gitlab.com/yourself/yourproject.git

更改url

[remote "origin"]
    url = https://oauth2:ACCESS_TOKEN@gitlab.com/yourself/yourproject.git

现在,您可以像启用2FA之前一样继续使用此现有git克隆。

答案 1 :(得分:9)

当提示输入凭据时,我使用生成的个人访问令牌作为密码。

这使我可以只使用标准的 Git Clone 语法而无需输入任何其他内容。

生成时,复制令牌。这是克隆时将存储在凭据管理器中的密码。使用它作为你的密码而不是你的 git 密码。

答案 2 :(得分:1)

访问下面的链接,然后输入您的姓名和有效期。

然后单击不同的复选框(例如read_user,read_repository,write_repository等)以访问范围,并创建一个新的Personal Access Token并将其存储在安全的位置

https://gitlab.com/profile/personal_access_tokens

现在,当您执行 git pull,git clone,git push等时,您可以输入用户名/电子邮件作为用户名,并输入新创建的Personal Access Token作为密码

答案 3 :(得分:0)

使用git clone ${CI_REPOSITORY_URL}

克隆当前存储库

使用git clone https://oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com/acme/my-project.git克隆其他存储库。 Gitlab使用“ oauth2” + 令牌约定来填充OAuth2身份验证标头,但是我找不到为此的官方文档。

使用git remote set-url origin ${CI_PROJECT_URL/gitlab.com/oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com}.git

启用当前回购修改

这是一个使用git push标记当前仓库的工作:

build_rpms:
  stage: package
  script:
    - echo "Build RPMs. Add tag v1.9d"
    - apk add git
    - git config --list

    # --force is needed for both tag and push to allow job replay
    - git tag v1.9d --force

    # Enable pushing from CI pipeline:
    #
    # At that point git origin points to CI_REPOSITORY_URL=
    # https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/acme/my-project.git
    # This setup does not allow modifications (i.e git push will be rejected).
    #
    # We use Gitlab Personal Access Token with 'write' access. This token shall
    # be generated via Gitlab user settings and then it shall be added as a masked
    # environment variable for this project CI settings.
    #
    # Use "oauth2" as user. For example for CI_PROJECT_URL=https://gitlab.com/acme/my-project
    #   set origin to https://oauth2:wSHnMvSmYXtTfXtqRMxs@gitlab.com/acme/my-project.git
    #
    - git remote set-url origin ${CI_PROJECT_URL/gitlab.com/oauth2:${PERSONAL_ACCESS_TOKEN}@gitlab.com}.git
    - git remote -v

    # Use -o ci.skip option to avoid triggering pipeline again
    - git push origin v1.9d --force -o ci.skip
  when:
    manual