【问题标题】:Using GitLab token to clone without authentication使用 GitLab 令牌无需身份验证即可克隆
【发布时间】:2014-10-14 02:31:18
【问题描述】:

我想在不提示我的自动化脚本的情况下克隆 GitLab 存储库,方法是使用我的 GitLab 帐户中的私人令牌。

谁能给我一个样品?

我知道我可以使用用户名和密码:

git clone https://" + user + ":" + password + "@" + gitlaburl;

我知道可以使用 ssh 密钥

但是,这两个选项都不够。

【问题讨论】:

  • git clone https://<token-name>:<token>@gitlaburl
  • 对我来说有用的语法是:https://$GIT_USERNAME:$GITLAB_PERSONAL_ACCESS_TOKEN@gitlaburl

标签: git gitlab


【解决方案1】:

这些天(2020 年 10 月)您只能使用以下内容

git clone $CI_REPOSITORY_URL

这将扩展为:

git clone https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.git

如果“令牌”密码是临时令牌,它应该会在构建完成后自动撤销。

【讨论】:

    【解决方案2】:

    就我而言,我只是提供了令牌 而不是密码(第二个输入字段)。

    我第一次从命令行推送了本地 repo。

    这些是我从头开始输入的命令(记得先移到 repo 的文件夹中)。

    $ git init
    
    $ git status
    
    $ git add .
    
    $ git status
    
    $ git commit -m 'Shinra Tensei.'
    
    $ git push --set-upstream https://gitlab.com/userName/my-repo.git master
    

    然后,您可以在图片中看到的弹出消息出现。提供了 USERNAME 和 TOKEN。

    【讨论】:

    • 非常感谢,您的回答帮助了我
    【解决方案3】:

    上面的许多答案都很接近,但它们得到的 deploy 标记的 ~username 语法不正确。还有其他类型的令牌,但 deploy token 是 gitlab 提供的(至少大约 2020+)每个 repo 以允许自定义访问,包括只读。

    repository(或group)找到settings --> repository --> deploy tokens。创建一个新的。将创建 usernametoken 字段。 username 默认不是固定值;它是这个令牌独有的。

    git clone https://<your_deploy_token_username>:<the_token>@gitlab.com/your/repo/path.git

    在 gitlab.com 公共、免费帐户上测试。

    【讨论】:

      【解决方案4】:

      不需要自定义 URL。只需为 gitlab 令牌使用 git 配置,例如

      git config --global gitlab.accesstoken {TOKEN_VALUE}
      

      extended description here

      【讨论】:

      • 这对我不起作用,我也无法在具有此名称的配置选项的任何地方找到文档
      • 您阅读过链接中的文章吗?这个变量是 gitlab 将从您的 git 客户端获取的用于身份验证的变量,您需要一个个人访问令牌。
      • 我确实阅读了链接的文章。 gitlab.accesstoken 不做任何事情,并且 GitLab 上没有任何文档引用它
      【解决方案5】:

      截至8.12,不再支持使用HTTPS + runner 令牌进行克隆,如here 所述:

      在 8.12 中,我们改进了构建权限。能够使用 runners 令牌克隆项目,从现在开始不再支持它(它实际上是巧合,从来都不是一个完全成熟的功能,所以我们在 8.12 中改变了它)。您应该改用构建令牌。

      这在此处被广泛记录 - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html

      【讨论】:

      • 无法使用 runners 令牌,但正在使用个人访问令牌。请看我的回答:stackoverflow.com/questions/25409700/…
      • @MuhanAlim 我不建议任何人使用访问令牌公开他们的整个帐户。这就是为什么它们被称为 Private 访问令牌!
      • 这个问题没有提到任何关于公开密钥的内容,只提到如何使用密钥代替用户名和密码进行克隆。但这是一个很好的观点,我不建议任何人在任何公开的地方使用密钥。
      • 自动化脚本意味着整个过程不在本地运行。可能是其他人也可以访问的地方。
      【解决方案6】:

      为了让我的未来快乐:RTFM - 根本不要使用 gitlab-ci-token,而是使用 .netrc 文件。

      有几点很重要:

      1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
      2. 别忘了用你的 URL 替换“gitlab.com”!
      3. 不要自作聪明,直接创建.netrc文件——gitlab不会替换文件中的$CI_JOB_TOKEN
      4. 使用https://gitlab.com/whatever/foobar.com - 不是ssh://git@foobar,不是git+ssh://,不是git+https://。 URL 中也不需要任何 CI-TOKEN 内容。
      5. 确保您可以git clone [url from step 4]

      背景:我知道了

      fatal: could not read Username for 'https://gitlab.mycompany.com': No such device or address
      

      当我试图让 Ansible + Gitlab + Docker 像我想象的那样工作时。现在可以了。

      【讨论】:

        【解决方案7】:

        在 GitLab CI 管道中,CI_JOB_TOKEN 环境变量适用于我:

        git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
        

        来源:Gitlab Docs

        顺便说一句,在.gitlab-ci.yml 中设置此变量有助于调试错误。

        variables:
            CI_DEBUG_TRACE: "true"
        

        【讨论】:

          【解决方案8】:

          一种可能的方法是使用部署令牌 (https://docs.gitlab.com/ee/user/project/deploy_tokens)。创建令牌后,使用:

          git clone https://<username>:<deploy_token>@gitlab.example.com/tanuki/awesome_project.git 
          

          如以上链接所述。

          【讨论】:

          • 这似乎与 npm install 在新的 docker 容器上一起工作,默认为 ssh。
          【解决方案9】:

          如果您已经有一个存储库并且只是更改了对 MFA 进行身份验证的方式,您可以更改您的 remote origin HTTP URI 以使用您的新 api 令牌,如下所示:

          git remote set-url origin https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git

          而且您根本不需要重新克隆存储库。

          【讨论】:

          • git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git 也为我工作,谢谢!我会用我的正确解决方案来回答这个帖子。
          【解决方案10】:

          使用令牌而不是密码(令牌需要具有“api”范围才能允许克隆):

          git clone https://username:token@gitlab.com/user/repo.git
          

          针对 11.0.0-ee 进行测试。

          【讨论】:

          • 对于谷歌搜索的人:如果在 gitlab.com 上通过 HTTPS 使用个人访问令牌,这就是您想要的。
          • 我们必须在这里而不是在个人访问令牌的 GitLab 文档页面上找到它,这不是很神奇吗?
          【解决方案11】:
          推荐的答案 GitLab

          gitlab有很多token:

          • 私人代币
          • 个人访问令牌
          • CI/CD 运行令牌

          我使用 GitLab Community Edition 10.1.2 仅测试了个人访问令牌,示例:

          git clone https://gitlab-ci-token:${Personal Access Tokens}@gitlab.com/username/myrepo.git
          
          
          git clone https://oauth2:${Personal Access Tokens}@gitlab.com/username/myrepo.git
          

          或使用用户名和密码:

          git clone https://${username}:${password}@gitlab.com/username/myrepo.git
          

          或输入您的密码:

          git clone https://${username}@gitlab.com/username/myrepo.git
          

          私人令牌似乎无法使用。

          【讨论】:

          • 请注意,在 GitLab 10.2 中删除了私有令牌以支持个人访问令牌:about.gitlab.com/2017/09/22/gitlab-10-0-released/…
          • 关于用户+密码+令牌?如何在一个 URL 中表达所有内容?现在我的 gitlab 软件服务器使用全部、登录和双因素(或令牌)。
          【解决方案12】:

          我使用每个项目的部署密钥设置进行 SSH(只读)

          【讨论】:

          • 我也是,因为我正在使用 GIT_STRATEGY:无。
          【解决方案13】:

          您可以将 runners 令牌用于 GitLab 存储库的 CI/CD 管道。

          git clone https://gitlab-ci-token:<runners token>@git.example.com/myuser/myrepo.git
          

          &lt;runners token&gt; 可以从哪里获得:

          git.example.com/myuser/myrepo/pipelines/settings
          

          或点击Settings icon -&gt; CI/CD Pipeline并在页面上查找Runners Token

          跑步者令牌位置的屏幕截图:

          【讨论】:

          • 注意:runners 令牌现在已经被弃用了。
          • @ArihantGodha 来源?
          • @miq 参见 here(截至 >= 8.12)
          • 此格式现已弃用,请参阅stackoverflow.com/questions/25409700/…
          • 在 GitLab CI 管道中不起作用。但这条线有效:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
          【解决方案14】:

          你可以这样做:

          git clone https://gitlab-ci-token:<private token>@git.example.com/myuser/myrepo.git
          

          【讨论】:

          • 这似乎是对的,但它总是无法通过我的身份验证:(
          • 和我一样:致命:身份验证失败
          • 需要替换为 CI runner 的 token,而不是账户的 private token。
          • 我认为你应该也可以使用你的个人令牌吧@tim
          • 您可以使用项目特定的 ci 令牌(启用构建,然后转到项目/运行器配置)。
          【解决方案15】:

          我知道这是旧的,但这是你的做法:

          git clone @987654321@

          【讨论】:

          • 这在 GitLab 8.5.7 企业版上对我有用。
          • 在这里工作(GitLab 社区版 8.16.5 064dab1)
          • 有效!我想知道为什么 gitlab.com 上的项目详细信息他们没有给出完整的命令语法:-((
          • 如何在ssh上使用这个?
          • 即使read_apiwrite_api 权限也不够。你必须有api
          猜你喜欢
          • 2020-07-03
          • 1970-01-01
          • 2017-03-04
          • 2017-10-18
          • 1970-01-01
          • 1970-01-01
          • 2016-09-11
          • 2018-01-03
          • 2013-08-29
          相关资源
          最近更新 更多