使用 GitLab 令牌无需身份验证即可克隆

Posted

技术标签:

【中文标题】使用 GitLab 令牌无需身份验证即可克隆【英文标题】:Using GitLab token to clone without authentication 【发布时间】: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 【参考方案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 令牌,但正在使用个人访问令牌。请看我的回答:***.com/questions/25409700/… @MuhanAlim 我不建议任何人使用访问令牌公开他们的整个帐户。这就是为什么它们被称为 Private 访问令牌! 这个问题没有提到任何关于公开密钥的内容,只提到如何使用密钥代替用户名和密码进行克隆。但这是一个很好的观点,我不建议任何人在任何公开的地方使用密钥。 自动化脚本意味着整个过程不在本地运行。可能是其他人也可以访问的地方。【参考方案6】:

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

有几点很重要:

    echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword $CI_JOB_TOKEN" > ~/.netrc 别忘了用你的 URL 替换“gitlab.com”! 不要自作聪明,直接创建.netrc文件——gitlab不会替换文件中的$CI_JOB_TOKEN! 使用https://gitlab.com/whatever/foobar.com - 不是ssh://git@foobar,不是git+ssh://,不是git+https://。 URL 中也不需要任何 CI-TOKEN 内容。 确保您可以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) 此格式现已弃用,请参阅***.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

以上是关于使用 GitLab 令牌无需身份验证即可克隆的主要内容,如果未能解决你的问题,请参考以下文章

无需身份验证令牌即可访问 Google 电子表格 API

Elasticsearch:无需基本身份验证即可创建用于访问的不记名令牌

每次从 github 拉取而无需身份验证

Web API 中基于令牌的身份验证,无需任何用户界面

链接是不是应该包含 HateOAS 中的身份验证令牌?

Laravel 通过生成的令牌进行身份验证,无需护照和 jwt