รับรองความถูกต้องกับ GitHub โดยใช้โทเค็น


118

ฉันพยายามตรวจสอบสิทธิ์กับ GitHub โดยใช้โทเค็นการเข้าถึงส่วนบุคคล ในไฟล์วิธีใช้ที่ github ระบุว่าให้ใช้เมธอด cURL เพื่อพิสูจน์ตัวตน ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ) ฉันได้ลองสิ่งนี้แล้ว แต่ฉันยังไม่สามารถกดไปที่ GitHub ได้ โปรดทราบว่าฉันกำลังพยายามผลักดันจากเซิร์ฟเวอร์ที่ไม่ได้รับการรับรองความถูกต้อง (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

รหัสนี้ทำให้เกิดข้อผิดพลาด:

ระยะไกล: การเข้าถึง scuzzlebuzzle / ol3-1.git ถูกปฏิเสธโดยไม่ระบุชื่อ

ถึงแก่ชีวิต: การตรวจสอบสิทธิ์ล้มเหลวสำหรับ " https://github.com/scuzzlebuzzle/ol3-1.git/ " "

คำตอบ:


192

curlคำสั่งของคุณผิดทั้งหมด คุณควรใช้สิ่งต่อไปนี้

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

นอกจากนี้ยังไม่อนุญาตให้คอมพิวเตอร์ของคุณโคลนที่เก็บหากในความเป็นจริงเป็นแบบส่วนตัว (ดูยังไงก็บ่งบอกว่าไม่ใช่) สิ่งที่คุณต้องทำตามปกติมีดังต่อไปนี้:

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

ซึ่งจะเพิ่มข้อมูลประจำตัวของคุณลงในรีโมตที่สร้างขึ้นเมื่อโคลนที่เก็บ อย่างไรก็ตามน่าเสียดายที่คุณไม่สามารถควบคุมวิธีที่ Travis โคลนที่เก็บของคุณได้ดังนั้นคุณต้องแก้ไขรีโมตเช่นนั้น

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

ซึ่งจะแก้ไขโครงการของคุณให้ใช้รีโมตที่มีข้อมูลรับรองในตัว

คำเตือน: โทเค็นมีสิทธิ์เข้าถึงแบบอ่าน / เขียนและควรปฏิบัติเหมือนรหัสผ่าน หากคุณป้อนโทเค็นของคุณลงใน URL โคลนเมื่อทำการโคลนหรือเพิ่มรีโมตGit writes it to your .git/config file in plain text, which is a security risk.


ขอบคุณมากสำหรับความช่วยเหลือของคุณ. มันใช้งานได้ดี นี่คือสำเนาของแฟ้มที่มีการเปลี่ยนแปลงของฉัน: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh ฉันเข้าใกล้ได้ดี ด้วยเหตุผลบางอย่างมันไม่ได้ดันไปที่ไดเร็กทอรี build1 ที่ฉันสร้างขึ้น แต่มันก็ยังถูกส่งไปยังไดเร็กทอรี build เพื่อให้มันใช้งานได้! ขอบคุณ!
wayofthefuture

1
ฉันไม่รู้ว่าคุณกำลังพูดถึงปุ่มตัวแก้ไขอะไร แต่การถอดรีโมทดั้งเดิมนั้นจำเป็นอย่างยิ่ง
Ian Stapleton Cordasco

1
เฮ้. เย็น. ดีใจที่ได้ช่วยเหลือ
Ian Stapleton Cordasco

4
คุณไม่จำเป็นต้อง rm รีโมทคุณสามารถใช้ set-url แทนได้เช่นgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus

1
แนวทางที่ไม่ปลอดภัย คีย์สามารถบันทึกข้อผิดพลาดได้อย่างง่ายดาย ใช้คีย์การปรับใช้ที่มีขอบเขตแน่นแทน
Joseph Lust

54

ขั้นแรกคุณต้องสร้างโทเค็นการเข้าถึงส่วนบุคคล (PAT) มีคำอธิบายที่นี่: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

บทความนี้จะบอกคุณถึงวิธีการสร้าง แต่ไม่มีเงื่อนงำว่าจะทำอย่างไรกับมัน หลังจากเอกสารเกี่ยวกับการลากอวนและ Stack Overflow ประมาณหนึ่งชั่วโมงในที่สุดฉันก็พบคำตอบ:

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

ฉันถูกบังคับจริงเพื่อให้สามารถใช้ตรวจสอบสองปัจจัยโดยนโยบายของ บริษัท ในขณะที่ผมทำงานการเปลี่ยนแปลงในระยะไกลและยังคงมีดังนั้นในความเป็นจริงมันก็ไม่ได้cloneผมจำเป็นต้องมี pushแต่ ฉันอ่านในหลาย ๆ ที่ที่ฉันต้องการลบและสร้างรีโมตขึ้นมาใหม่ แต่อันที่จริงpushคำสั่งปกติของฉันทำงานเหมือนกับcloneข้างต้นทุกประการและรีโมตไม่เปลี่ยนแปลง:

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

(@YMHuang ทำให้ฉันมาถูกทางพร้อมลิงค์เอกสาร)


ขอบคุณสำหรับสิ่งนั้นฉันก็เผชิญกับงานเดียวกัน
Surya Prakash Patel

ดีอย่างสมบูรณ์แบบ
Samim Aftab Ahmed

ฉันลองใช้วิธีนี้หลายครั้ง แต่ก็ประสบปัญหาเดียวกัน ฉันสร้าง PTA แล้วพยายามพิสูจน์ตัวตนหลังจากดำเนินการคำสั่งพุชใส่ชื่อผู้ใช้และโทเค็นของฉัน มันยังคงบอกฉันว่าข้อมูลรับรองไม่ถูกต้อง ฉันพลาดอะไรในขั้นตอนเหล่านี้
johnny_kb

30

เพื่อหลีกเลี่ยงการมอบ "กุญแจสู่ปราสาท" ...

โปรดทราบว่าการตอบสนองของ sigmavirus24 กำหนดให้คุณต้องให้โทเค็นแก่ Travis ที่มีสิทธิ์ค่อนข้างกว้างเนื่องจาก GitHub เสนอโทเค็นที่มีขอบเขตกว้าง ๆ เช่น "write all my public repos" หรือ "write all my private repos"

หากคุณต้องการลดการเข้าถึง (ด้วยการทำงานอีกเล็กน้อย!) คุณสามารถใช้คีย์การปรับใช้ GitHub ร่วมกับฟิลด์ yaml ที่เข้ารหัส Travis

นี่คือภาพร่างของเทคนิคการทำงาน ...

ขั้นแรกให้สร้างคีย์การปรับใช้ RSA (ผ่านssh-keygen) ที่เรียกmy_keyและเพิ่มเป็นคีย์การปรับใช้ในการตั้งค่า github repo ของคุณ

จากนั้น ...

$ 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

จากนั้นใช้$passwordไฟล์เพื่อถอดรหัสคีย์การปรับใช้ของคุณในเวลารวมโดยเพิ่มลงในไฟล์ yaml ของคุณ:

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

หมายเหตุ: บรรทัดสุดท้ายจะเติมข้อมูลคีย์ RSA ของ github ไว้ล่วงหน้าซึ่งหลีกเลี่ยงความจำเป็นในการยอมรับด้วยตนเองในขณะที่เชื่อมต่อ


30

Automation / Git อัตโนมัติด้วยโทเค็น OAuth

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

นอกจากนี้ยังทำงานในgit pushคำสั่ง

อ้างอิง: https://help.github.com/articles/git-automation-with-oauth-tokens/


4
กุญแจสำคัญคือการตั้งค่าคอมไพล์เพื่อที่คุณจะได้ไม่ต้องได้รับการแจ้งเตือนตลอดเวลาสำหรับโทเค็นของคุณตามที่อธิบายไว้ที่นี่ - help.github.com/articles/caching-your-github-password-in-git คำตอบอื่น ๆ สำหรับคำถามนี้ จะจบลงด้วยการเขียนโทเค็นของคุณในรูปแบบข้อความธรรมดาไปยัง. git / config ซึ่งอาจถือได้ว่ามีความเสี่ยงด้านความปลอดภัย
jerome

ข้อมูลอ้างอิงที่ดี - txs!
dalcam

ขอบคุณที่น่ารัก https: // <mytoken> @mygiturl ทำงานใน. git \ config ของฉัน
Tyeth

22

สิ่งนี้ใช้ได้ผลสำหรับฉันโดยใช้ ssh :

การตั้งค่าการตั้งค่าผู้พัฒนา → สร้างโทเค็นใหม่

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

2
นอกจากนี้ยังใช้ได้กับโทเค็นการเข้าถึงส่วนบุคคลโดยใช้รูปแบบนี้:git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ

ฉันต้องทำgit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow

นี่เป็นความคิดที่ไม่ดีใช่ไหม โทเค็นจะไม่ถูกแคชในประวัติคอนโซลหรือไม่?
TheRealChx101

ทำงานให้ฉันด้วย git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO]
.git

@ TheRealChx101 คุณสามารถใช้บางอย่างเช่นgit remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1เพื่อหลีกเลี่ยงการบันทึกข้อมูล git ที่ไม่ปลอดภัย จัดเก็บโทเค็นในตัวแปรเพื่อหลีกเลี่ยงไม่ให้มีอยู่ในบันทึก แต่ต้องเก็บไว้ที่ไหนสักแห่ง เพื่อความปลอดภัยเพิ่มเติมคุณสามารถจัดเก็บแบบเข้ารหัส ตัวอย่างเช่นแนวทางนี้สนับสนุนโดย Travis CI
kap

3

ปกติฉันทำแบบนี้

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

git_token กำลังอ่านจาก config ตัวแปรใน azure devops

คุณสามารถอ่านบล็อกทั้งหมดของฉันได้ที่นี่


1

หลังจากต่อสู้กับปัญหานี้ในการเข้ารหัสอย่างหนักตลอดทั้งวันในส่วน ORG / REPO ในสคริปต์บิลด์ของเราได้รับข้อผิดพลาด 'ไม่พบระยะไกล' ที่น่ากลัวในที่สุดก็พบวิธีแก้ปัญหาที่ใช้งานได้ที่จะใช้ไฟล์TRAVIS_REPO_SLUG. การสลับสิ่งนี้สำหรับแอตทริบิวต์ที่เข้ารหัสจะทำงานทันที

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

0

ด้วยการดิ้นรนหลายชั่วโมงในการใช้โทเค็น GitHubในที่สุดก็ทำงานได้ดังนี้:

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

  • รหัสเป็นไปตามคำแนะนำของCodefreshเกี่ยวกับการโคลน repo โดยใช้โทเค็น (ฟรีสไตล์}
  • ดำเนินการทดสอบ: ใจเย็น %d%H%Mกับคำที่ตรงกัน'-123456-whatever'
  • ดันกลับไปที่ repo (ซึ่งเป็นrepo ส่วนตัว )
  • ทริกเกอร์โดยDockerHub webhooks

ต่อไปนี้เป็นรหัสที่สมบูรณ์:

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

เอาท์พุต ...

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

รหัสผ่านที่คุณใช้เพื่อล็อกอินเข้าสู่พอร์ทัล github.com ใช้ไม่ได้ใน VS Code CLI / Shell คุณควรคัดลอก PAT Token จาก URL https://github.com/settings/tokensโดยสร้างโทเค็นใหม่และวางสตริงนั้นใน CLI เป็นรหัสผ่าน


0

หากคุณใช้ GitHub Enterprise และการโคลน repo หรือการพุชทำให้คุณมีข้อผิดพลาด 403 แทนที่จะแจ้งให้ป้อนชื่อผู้ใช้ / โทเค็นคุณสามารถใช้สิ่งนี้:

  1. ลบ repo
  2. เปิดพรอมต์คำสั่งและไปที่โฟลเดอร์ที่คุณต้องการ repo
  3. ประเภท:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.