使用 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
。创建一个新的。将创建 username
和 token
字段。 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】: 推荐的答案 GitLabgitlab有很多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
<runners token>
可以从哪里获得:
git.example.com/myuser/myrepo/pipelines/settings
或点击Settings icon -> 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
【讨论】:
这似乎是对的,但它总是无法通过我的身份验证:( 和我一样:致命:身份验证失败我知道这是旧的,但这是你的做法:
git clone @987654321@
【讨论】:
这在 GitLab 8.5.7 企业版上对我有用。 在这里工作(GitLab 社区版 8.16.5 064dab1) 有效!我想知道为什么 gitlab.com 上的项目详细信息他们没有给出完整的命令语法:-(( 如何在ssh
上使用这个?
即使read_api
和write_api
权限也不够。你必须有api
。以上是关于使用 GitLab 令牌无需身份验证即可克隆的主要内容,如果未能解决你的问题,请参考以下文章