Xác thực với GitHub bằng mã thông báo


118

Tôi đang cố gắng xác thực với GitHub bằng mã thông báo truy cập cá nhân. Trong tệp trợ giúp tại github, nó tuyên bố sử dụng phương thức cURL để xác thực ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ). Tôi đã thử điều này, nhưng tôi vẫn không thể đẩy lên GitHub. Xin lưu ý, tôi đang cố đẩy từ máy chủ chưa được xác thực (Travis-CI).

cd $HOME
git config --global user.email "emailaddress@yahoo.com"
git config --global user.name "username"

curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages

cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf

git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git push -fq origin gh-pages

Mã này gây ra lỗi:

từ xa: Quyền truy cập ẩn danh vào scuzzlebuzzle / ol3-1.git bị từ chối.

nghiêm trọng: Xác thực không thành công cho ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "

Câu trả lời:


191

curlLệnh của bạn hoàn toàn sai. Bạn nên sử dụng những thứ sau

curl -H 'Authorization: token <MYTOKEN>' ...

Ngoài ra, điều đó không cho phép máy tính của bạn sao chép kho lưu trữ nếu thực tế nó là riêng tư. (Tuy nhiên, khi nhìn vào sẽ thấy rằng không phải vậy.) Những gì bạn thường làm như sau:

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages

Điều đó sẽ thêm thông tin đăng nhập của bạn vào điều khiển từ xa được tạo khi nhân bản kho lưu trữ. Tuy nhiên, thật không may, bạn không có quyền kiểm soát cách Travis sao chép kho lưu trữ của bạn, vì vậy bạn phải chỉnh sửa điều khiển từ xa như vậy.

# After cloning
cd gh-pages
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git

Điều đó sẽ sửa dự án của bạn để sử dụng điều khiển từ xa với thông tin đăng nhập được tích hợp sẵn.

Cảnh báo: Mã thông báo có quyền đọc / ghi và phải được coi như mật khẩu. Nếu bạn nhập mã thông báo của mình vào URL sao chép khi sao chép hoặc thêm điều khiển từ xa,Git writes it to your .git/config file in plain text, which is a security risk.


Cảm ơn rất nhiều vì sự giúp đỡ của bạn. Nó hoạt động tuyệt vời. Đây là bản sao của tệp đã thay đổi của tôi: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Tôi đã nhận nó khá gần. Vì lý do nào đó nó không đẩy đến thư mục build1 mà tôi đã tạo, nhưng nó vẫn đẩy vào thư mục build để nó hoạt động! CẢM ƠN!
wayofthefuture

1
Tôi không biết bạn đang nói đến nút chỉnh sửa nào nhưng việc xóa điều khiển từ xa ban đầu là hoàn toàn cần thiết.
Ian Stapleton Cordasco

1
Heh. Mát mẻ. Rất vui được giúp đỡ.
Ian Stapleton Cordasco

4
Bạn không cần phải rm điều khiển từ xa, bạn có thể sử dụng set-url thay vào đó, như tronggit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
Berkus

1
Cách tiếp cận không an toàn. Key dễ dàng ghi nhật ký lỗi. Thay vào đó, hãy sử dụng một khóa triển khai có phạm vi chặt chẽ.
Joseph Lust

53

Đầu tiên, bạn cần tạo mã thông báo truy cập cá nhân (PAT). Điều này được mô tả ở đây: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Thật buồn cười, bài báo cho bạn biết cách tạo nó, nhưng hoàn toàn không đưa ra manh mối phải làm gì với nó. Sau khoảng một giờ trawling tài liệu và Stack Overflow, cuối cùng tôi đã tìm thấy câu trả lời:

$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

Tôi thực sự buộc phải bật xác thực hai yếu tố theo chính sách của công ty trong khi tôi đang làm việc từ xa và vẫn có những thay đổi cục bộ, vì vậy trên thực tế, clonetôi không cần, nhưng push. Tôi đã đọc ở rất nhiều nơi rằng tôi cần xóa và tạo lại điều khiển từ xa, nhưng trên thực tế, pushlệnh bình thường của tôi hoạt động giống hệt như cloneở trên và điều khiển từ xa không thay đổi:

$ git push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

(@YMHuang đưa tôi đi đúng hướng với liên kết tài liệu.)


Cảm ơn vì điều đó, tôi cũng đang đối mặt với nhiệm vụ tương tự
Surya Prakash Patel

hoàn toàn ổn.
Samim Aftab Ahmed

Tôi đã thử nhiều lần cách tiếp cận này, nhưng tôi đang gặp phải vấn đề tương tự. Tôi đã tạo PTA và sau đó cố gắng xác thực sau khi thực hiện lệnh đẩy, đặt tên người dùng và mã thông báo của tôi. Nó vẫn cho tôi biết rằng thông tin đăng nhập là sai. Tôi còn thiếu gì trong các bước này?
johnny_kb

30

Để tránh giao "chìa khóa thành lâu đài" ...

Lưu ý rằng phản hồi của sigmavirus24 yêu cầu bạn cung cấp cho Travis một mã thông báo có quyền khá rộng - vì GitHub chỉ cung cấp các mã thông báo có phạm vi rộng như "viết tất cả các repo công khai của tôi" hoặc "viết tất cả các repo riêng tư của tôi".

Nếu bạn muốn thắt chặt quyền truy cập (với một chút công việc hơn!), Bạn có thể sử dụng các khóa triển khai GitHub kết hợp với các trường yaml được mã hóa Travis.

Đây là bản phác thảo cách thức hoạt động của kỹ thuật này ...

Trước tiên, tạo một khóa triển khai RSA (qua ssh-keygen) được gọi my_keyvà thêm nó làm khóa triển khai trong cài đặt repo github của bạn.

Sau đó...

$ password=`openssl rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a  > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo

Sau đó, sử dụng $passwordtệp để giải mã khóa triển khai của bạn tại thời điểm tích hợp, bằng cách thêm vào tệp yaml của bạn:

before_script: 
  - openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
  - echo -e "Host github.com\n  IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
  - echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts

Lưu ý: dòng cuối cùng điền trước khóa RSA của github, giúp tránh yêu cầu chấp nhận thủ công tại thời điểm kết nối.


30

Tự động hóa / tự động hóa Git với mã thông báo OAuth

$ git clone https://github.com/username/repo.git
  Username: your_token
  Password:

Nó cũng hoạt động trong git pushlệnh.

Tham khảo: https://help.github.com/articles/git-automation-with-oauth-tokens/


4
Điều quan trọng là đặt git để bạn không cần phải luôn được nhắc cho mã thông báo của mình, như được mô tả ở đây - help.github.com/articles/caching-your-github-password-in-git Các câu trả lời khác cho câu hỏi này sẽ kết thúc việc ghi mã thông báo của bạn dưới dạng văn bản rõ ràng thành .git / config có thể được coi là một rủi ro bảo mật.
jerome

tài liệu tham khảo tuyệt vời - txs!
dalcam 12/12/16

đáng yêu, cảm ơn https: // <mytoken> @mygiturl đã thành công trong .git \ config của tôi
Tyeth

22

Điều này làm việc cho tôi bằng cách sử dụng ssh :

Cài đặtCài đặt nhà phát triểnTạo mã thông báo mới .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git

2
Điều này cũng hoạt động đối với mã thông báo truy cập cá nhân sử dụng định dạng này:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ

Tôi phải làmgit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow 19/07/19

Đây không phải là một ý tưởng tồi phải không? Mã thông báo sẽ không được lưu vào bộ nhớ cache trong lịch sử bảng điều khiển phải không?
TheRealChx101

Cũng làm việc cho tôi git thêm nguồn gốc từ xa https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol

@ TheRealChx101Bạn có thể sử dụng một cái gì đó như git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1để tránh ghi lại đầu ra git không an toàn. Lưu trữ mã thông báo trong một biến để tránh có trong nhật ký. Nhưng nó cần được cất giữ ở đâu đó. Để bảo mật hơn nữa, bạn có thể lưu trữ nó được mã hóa. Ví dụ, cách tiếp cận này được hỗ trợ bởi Travis CI.
kap

3

Bình thường tôi làm như thế này

 git push https://$(git_token)@github.com/user_name/repo_name.git

Git_token đang đọc từ cấu hình biến trong các devops azure.

Bạn có thể đọc toàn bộ blog của tôi ở đây


1

Đã vật lộn với vấn đề này trong suốt một ngày dài viết mã khó trong phần ORG / REPO vào tập lệnh xây dựng của chúng tôi nhận được lỗi 'không tìm thấy từ xa' đáng sợ, cuối cùng đã tìm thấy một giải pháp hiệu quả để sử dụng TRAVIS_REPO_SLUG. Chuyển đổi này vào cho các thuộc tính mã cứng hoạt động ngay lập tức.

git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}

0

Bằng cách đấu tranh rất nhiều giờ để áp dụng mã thông báo GitHub cuối cùng nó hoạt động như dưới đây:

$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)

  • mã tuân theo hướng dẫn Codefresh về sao chép repo bằng mã thông báo (freestyle}
  • kiểm tra thực hiện: sed %d%H%M on match word'-123456-whatever'
  • đẩy trở lại repo (là repo riêng tư )
  • được kích hoạt bởi DockerHub webhooks

Sau đây là mã hoàn chỉnh:

version: '1.0'
steps:
  get_git_token:
    title: Reading Github token
    image: codefresh/cli
    commands:
      - cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
  main_clone:
    title: Updating the repo
    image: alpine/git:latest
    commands:
      - git clone https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "chetabahana@gmail.com"
      - git remote add origin https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
      - git status && git add . && git commit -m "fresh commit" && git push -u origin master

Đầu ra ...

On branch master 
Changes not staged for commit: 
  (use "git add ..." to update what will be committed) 
  (use "git checkout -- ..." to discard changes in working directory) 

modified:   cloudbuild.yaml 

no changes added to commit (use "git add" and/or "git commit -a") 
[master dbab20f] fresh commit 
 1 file changed, 1 insertion(+), 1 deletion(-) 
Enumerating objects: 5, done. 
Counting objects:  20% (1/5) ...  Counting objects: 100% (5/5), done. 
Delta compression using up to 4 threads 
Compressing objects:  33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: Resolving deltas:   0% (0/2)  ...   (2/2), completed with 2 local objects. 
To https://github.com/chetabahana/compose.git 
   bbb6d2f..dbab20f  master -> master 
Branch 'master' set up to track remote branch 'master' from 'origin'. 
Reading environment variable exporting file contents. 
Successfully ran freestyle step: Cloning the repo 

0

Mật khẩu bạn sử dụng để đăng nhập vào cổng github.com không hoạt động trong VS Code CLI / Shell. Bạn nên sao chép Mã thông báo PAT từ URL https://github.com/settings/tokens bằng cách tạo mã thông báo mới và dán chuỗi đó vào CLI làm mật khẩu.


0

Nếu bạn đang sử dụng GitHub Enterprise và sao chép repo hoặc đẩy đưa cho bạn lỗi 403 thay vì nhắc nhập tên người dùng / mã thông báo, bạn có thể sử dụng điều này:

  1. Xóa repo
  2. Mở dấu nhắc lệnh và điều hướng đến thư mục bạn muốn repo
  3. Kiểu:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
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.