使用gitlab令牌克隆而不进行身份验证


139

我想通过使用我的gitlab帐户中的私有令牌来克隆gitlab存储库,而不提示我输入自动化脚本。

有人可以提供样品吗?

我知道我可以使用用户名和密码来这样做:

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

我知道可以用ssh key

但是,这两种选择都不足够


20
git clone https://<token-name>:<token>@gitlaburl
Kinght金

@Kinght金只有您的命令有效!!非常感谢:-)
侯赛因K

Answers:


195

我知道这很老了,但这是您的做法:

git clone https://oauth2:ACCESS_TOKEN@somegitlab.com/vendor/package.git


3
这在GitLab 8.5.7 Enterprise Edition上对我有用。
Ben Patterson

1
在这里工作(GitLab社区版8.16.5 064dab1)
Martin M.

5
有用!我想知道为什么在gitlab.com上的项目详细信息中,他们没有给出完整的命令语法:-((
FRa

适用于Gitlab 10.4.4,但您需要制作一个api令牌。一个read_user只能在读回购/users
科特

2
如何使用ssh呢?
hemu

41

您可以这样做:

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

2
这似乎是正确的,但对我而言始终无法通过身份验证:(
Randyaa

对我一样:致命:身份验证失败
vogash

4
<private token>需要替换为CI运行者的令牌,而不是帐户的私有令牌。
Kip

2
我认为您也应该可以使用您的个人令牌权利@tim
Gobi

您可以使用项目特定的ci令牌(启用构建,然后转到项目/运行者配置)。
BM5k '16

41

gitlab有很多令牌:

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

我使用GitLab社区版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

但是私人令牌似乎无法正常工作。


5
需要注意的是私人的记号是为了追求个人的访问令牌的去除GitLab 10.2:about.gitlab.com/2017/09/22/gitlab-10-0-released/...
大卫Planella

26

使用令牌代替密码(令牌必须具有“ api”作用域才能允许克隆):

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

已针对11.0.0-ee测试。


是的,它对我有用。令牌可以用作密码。
cwtuan

1
对于使用Google搜索的人:如果在gitlab.com上通过HTTPS使用个人访问令牌,这就是您想要的。
亚当·巴克斯特

14

您可以将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

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


5
注意:跑步者令牌现已弃用。
Arihant Godha '16

@ArihantGodha来源?
miq

2
@miq看到这里(> = 8.12起)
Yan Foto

1
这种格式现在已经废弃,请参阅stackoverflow.com/questions/25409700/...
Muhan卡西莫夫

在GitLab CI管道内部不起作用。但此行有效:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Slawa

12

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

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

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


3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.git也为我工作,谢谢!我将使用正确的解决方案来回答该线程。
Rutrus


10

此处开始,不再支持8.12使用HTTPS+运行器令牌进行克隆,如此处所述:

在8.12中,我们改进了构建权限。从现在开始就不支持使用Runners令牌克隆项目(它实际上是巧合,并且从来都不是完全成熟的功能,因此我们在8.12中进行了更改)。您应该改用构建令牌。

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


1
不可能使用跑步者令牌,但正在使用个人访问令牌。请参阅我的回答:stackoverflow.com/questions/25409700/...
Muhan卡西莫夫

@MuhanAlim我不建议任何人使用访问令牌公开其整个帐户。这就是为什么它们被称为专用访问令牌
Yan Foto

这个问题没有提到有关公开密钥的任何问题,只是提及如何使用密钥代替用户名和密码进行克隆。但这是一个好点,我不建议任何人在公共场所使用密钥。
Muhan Alim

1
自动化脚本意味着整个过程未在本地运行。可能是其他人也可以访问的地方。
Yan Foto

8

在GitLab CI管道内,CI_JOB_TOKEN环境变量对我有用:

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

资料来源:Gitlab文件

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

variables:
    CI_DEBUG_TRACE: "true"

2

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


我也是,因为我使用的是GIT_STRATEGY:无。
Aalex Gabi

1

为了让我的未来我很开心:RTFM -不要使用在所有的gitlab-CI-令牌,但该.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正常工作时。现在可以了。



1

上面的许多答案都很接近,但是它们获得〜username语法deploy不正确的标记。还有其他类型的令牌,但是deploy tokengitlab为每个回购提供了(至少在2020年左右)以允许自定义访问(包括只读)。

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公共免费帐户上进行了测试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.