sử dụng mã thông báo gitlab để sao chép mà không cần xác thực


139

Tôi muốn sao chép kho lưu trữ gitlab mà không cần nhắc về tập lệnh tự động hóa của mình, bằng cách sử dụng mã thông báo riêng tư từ tài khoản gitlab của tôi.

Ai đó có thể cung cấp cho tôi một mẫu?

Tôi biết tôi có thể làm như vậy với người dùng và mật khẩu:

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

và tôi biết điều đó là có thể với khóa ssh

nhưng, cả hai lựa chọn đều không hiệu quả


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

@Kinght 金 Chỉ lệnh của bạn hoạt động !!. Cảm ơn rất nhiều :-)
Hussain K

Câu trả lời:


195

Tôi biết điều này đã cũ nhưng đây là cách bạn làm điều đó:

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


3
Điều này làm việc cho tôi trên GitLab 8.5.7 Enterprise Edition.
Ben Patterson

1
Hoạt động tại đây (GitLab Community Edition 8.16.5 064dab1)
Martin M.

5
Nó hoạt động! Tôi tự hỏi tại sao trên gitlab.com về chi tiết dự án họ không đưa ra cú pháp lệnh hoàn chỉnh: - ((
FRa

Hoạt động cho Gitlab 10.4.4 nhưng bạn cần tạo apimã thông báo. A read_userchỉ có thể đọc repos dưới/users
Kurt

2
Làm thế nào để sử dụng này hơn ssh?
hemu

41

Bạn có thể làm như thế này:

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

2
Điều này có vẻ đúng nhưng nó luôn thất bại đối với tôi :(
Randyaa

tương tự với tôi: gây tử vong: Xác thực thất bại cho
vogash

4
<mã thông báo riêng> cần được thay thế bằng mã thông báo của người chạy CI, chứ không phải mã thông báo riêng của tài khoản.
Kip

2
tôi nghĩ bạn cũng có thể sử dụng mã thông báo cá nhân của mình ngay @tim
Gobi Dasu

Bạn có thể sử dụng mã thông báo ci cụ thể của dự án (bật các bản dựng, sau đó đi đến cấu hình dự án / runners).
BM5k

41

Gitlab có rất nhiều mã thông báo:

  • Mã thông báo riêng
  • Mã thông báo truy cập cá nhân
  • CI / CD chạy mã thông báo

Tôi chỉ kiểm tra Mã thông báo truy cập cá nhân bằng GitLab Community Edition 10.1.2 , ví dụ:

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

hoặc sử dụng tên người dùng và mật khẩu:

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

hoặc bằng cách nhập mật khẩu của bạn:

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

Nhưng mã thông báo riêng dường như không thể hoạt động.


5
Lưu ý rằng thẻ tin đã được gỡ bỏ trong lợi của thẻ truy cập cá nhân trong GitLab 10,2: about.gitlab.com/2017/09/22/gitlab-10-0-released/...
David Planella

26

Sử dụng mã thông báo thay vì mật khẩu (mã thông báo cần phải có phạm vi "api" để nhân bản được cho phép):

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

Đã thử nghiệm với 11.0.0-ee.


Vâng, nó làm việc cho tôi. Mã thông báo có thể được sử dụng làm mật khẩu.
cwtuan

1
Đối với mọi người Googling này: đây là những gì bạn muốn nếu sử dụng Mã truy cập cá nhân qua HTTPS trên gitlab.com.
Adam Baxter

14

Bạn có thể sử dụng mã thông báo runners cho CI / CD Pipelines của repo GitLab của bạn.

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

Nơi <runners token>có thể được lấy từ:

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

hoặc bằng cách nhấp vào Settings icon -> CI/CD Pipelinevà tìm kiếm Mã thông báo Runners trên trang

Ảnh chụp màn hình của vị trí mã thông báo người chạy: Ảnh chụp màn hình của vị trí mã thông báo người chạy


5
Lưu ý: Mã thông báo người chạy hiện không được chấp nhận.
Arihant Godha

@ArihantGodha nguồn?
miq

2
@miq xem tại đây (kể từ> = 8.12)
Yan Foto

1
Định dạng này hiện không được chấp nhận, vui lòng xem stackoverflow.com/questions/25409700/ cấp
Muhan Alim

Không hoạt động từ bên trong đường ống GitLab CI. Nhưng dòng này hoạt động:git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/...
Slawa

12

Nếu bạn đã có một kho lưu trữ và chỉ thay đổi cách bạn xác thực thành MFA, bạn có thể thay đổi remote originURI HTTP để sử dụng mã thông báo api mới của mình như sau:

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

Và bạn sẽ không cần phải sao chép lại kho lưu trữ.


3
git clone https://oauth2:TOKEN@ANY_GIT_PROVIDER_DOMAIN/YOUR_PROJECT/YOUR_REPO.gitcũng làm việc cho tôi, cảm ơn bạn !! Tôi sẽ trả lời chủ đề này với giải pháp chính xác của tôi.
Rutrus

10

Một cách có thể là sử dụng mã thông báo triển khai ( https://docs.gitlab.com/ee/user/project/deploy_tokens ). Sau khi tạo mã thông báo, sử dụng:

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

như đã đề cập trong liên kết ở trên.


Điều này dường như không hoạt động với cài đặt npm trên một container docker mới, mặc định là ssh.
Vix

Thực sự không làm việc.
rios0rios0

10

Kể từ đó 8.12, nhân bản bằng cách sử dụng HTTPSmã thông báo + người chạy không được hỗ trợ nữa, như đã đề cập ở đây :

Trong 8.12, chúng tôi đã cải thiện quyền xây dựng. Có thể sao chép dự án bằng cách sử dụng mã thông báo runners từ bây giờ không được hỗ trợ (nó thực sự hoạt động do sự trùng hợp và không bao giờ là một tính năng hoàn chỉnh, vì vậy chúng tôi đã thay đổi điều đó trong 8.12). Bạn nên sử dụng mã thông báo xây dựng thay thế.

Điều này được ghi lại rộng rãi ở đây - https://docs.gitlab.com/ce/user/project/new_ci_build_permissions_model.html .


1
Không thể sử dụng mã thông báo người chạy nhưng đang sử dụng mã thông báo truy cập cá nhân. Vui lòng xem câu trả lời của tôi: stackoverflow.com/questions/25409700/
Kẻ

@MuhanAlim Tôi khuyên mọi người không nên tiết lộ toàn bộ tài khoản của mình bằng cách sử dụng mã thông báo truy cập. Đó là lý do tại sao chúng được gọi là Mã truy cập riêng !
Yan Foto

Câu hỏi không đề cập bất cứ điều gì về việc công khai khóa, chỉ có cách sử dụng khóa thay cho tên người dùng và mật khẩu để nhân bản. Nhưng đó là một điểm tốt, tôi sẽ không khuyên mọi người sử dụng các phím ở bất cứ nơi nào công khai.
Muhan Alim

1
kịch bản tự động hóa ngụ ý rằng toàn bộ thủ tục không chạy cục bộ. Có lẽ ở đâu đó mà người khác cũng có quyền truy cập.
Yan Foto

8

Trong một đường ống GitLab CI, CI_JOB_TOKENbiến môi trường hoạt động với tôi:

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

Nguồn: Tài liệu Gitlab

BTW, thiết lập biến .gitlab-ci.ymlnày để giúp gỡ lỗi.

variables:
    CI_DEBUG_TRACE: "true"

2

Tôi đã sử dụng SSH bằng cách sử dụng cài đặt khóa triển khai cho mỗi dự án (chỉ đọc)


Tôi cũng vậy vì tôi đang sử dụng GIT_STRATEGY: không có.
Aalex Gabi

1

Để làm cho tương lai của tôi hạnh phúc: RTFM - không sử dụng gitlab-ci-token, nhưng .netrctập tin.

Có một vài điểm quan trọng:

  1. echo -e "machine gitlab.com\nlogin gitlab-ci-token\npassword ${CI_JOB_TOKEN}" > ~/.netrc
  2. Đừng quên thay thế "gitlab.com" bằng URL của bạn!
  3. Đừng cố tỏ ra thông minh và trực tiếp tạo tệp .netrc - gitlab sẽ không thay thế $CI_JOB_TOKENtệp trong tệp!
  4. Sử dụng https://gitlab.com/whatever/foobar.com- không ssh://git@foobar, không git+ssh://, khônggit+https:// . Bạn cũng không cần bất kỳ nội dung CI-TOKEN nào trong URL.
  5. Hãy chắc chắn rằng bạn có thể git clone [url from step 4]

Bối cảnh: Tôi có

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

khi tôi cố gắng làm cho Ansible + Gitlab + Docker hoạt động như tôi tưởng tượng. Bây giờ nó hoạt động.



1

nhiều câu trả lời ở trên rất gần, nhưng chúng nhận được ~ usernamecú pháp cho deploymã thông báo không chính xác. Có các loại mã thông báo khác, nhưng đó deploy tokenlà những gì gitlab cung cấp (ít nhất là vào khoảng năm 2020 trở lên) trên mỗi repo để cho phép truy cập tùy chỉnh, bao gồm chỉ đọc.

từ một repository(hoặc group), tìm settings- repository- -> deploy tokens. Tạo một cái mới. A usernametokentrường được tạo. Các usernameKHÔNG phải là một giá trị cố định theo mặc định; nó là duy nhất cho mã thông báo này.

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

thử nghiệm trên gitlab.com công khai, tài khoản miễn phí.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.