एक टोकन का उपयोग करके गिटहब के साथ प्रमाणीकरण


118

मैं व्यक्तिगत पहुंच टोकन का उपयोग करके GitHub के साथ प्रमाणित करने का प्रयास कर रहा हूं। गितुब में मदद फ़ाइलों में, यह प्रमाणित करने के लिए CURL विधि का उपयोग करने के लिए कहता है ( https://help.github.com/articles/creating-an-access-token-for-command-line-use )। मैंने यह कोशिश की है, लेकिन मैं अभी भी GitHub को धक्का नहीं दे सकता। कृपया ध्यान दें, मैं एक अनधिकृत सर्वर (ट्रैविस-सीआई) से धक्का देने की कोशिश कर रहा हूं।

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

यह कोड त्रुटियों का कारण बनता है:

रिमोट: स्कोबोबॉजिस्ट / ओल 3-1. एनिट के लिए अनाम अभिगम।

घातक: ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' के लिए प्रमाणीकरण विफल हुआ

जवाबों:


191

आपकी curlआज्ञा पूरी तरह से गलत है। आपको निम्नलिखित का उपयोग करना चाहिए

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

एक तरफ, कि आपके कंप्यूटर को रिपॉजिटरी को क्लोन करने के लिए अधिकृत नहीं करता है अगर वास्तव में यह निजी है। (हालांकि, एक नज़र रखना यह दर्शाता है कि यह नहीं है।) आप सामान्य रूप से क्या करेंगे:

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

जब रिपॉजिटरी का क्लोन बनाते समय बनाए गए रिमोट से आपकी साख जुड़ जाएगी। दुर्भाग्य से, हालांकि, आपके पास इस बात पर कोई नियंत्रण नहीं है कि ट्रैविस आपके भंडार को कैसे क्लोन करता है, इसलिए आपको रिमोट को इस तरह संपादित करना होगा।

# 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/sh । मैंने इसे काफी करीब से देखा। किसी कारण से इसे मैंने बनाया build1 निर्देशिका के लिए धक्का नहीं दिया, लेकिन यह अभी भी निर्माण निर्देशिका के लिए धक्का दिया तो यह काम किया! धन्यवाद!
वाफ्थेफ्यूवन सीपेट

1
मुझे नहीं पता कि आप किस संपादक बटन से बात कर रहे हैं, लेकिन मूल रिमोट को हटाना बिल्कुल आवश्यक है।
इयान स्टैपलटन कॉर्डैस्को

1
हे। ठंडा। मदद करने में खुशी।
इयान स्टैपलटन कॉर्डैस्को

4
आपको दूरस्थ आरएम करने की आवश्यकता नहीं है, आप इसके बजाय सेट-यूआरएल का उपयोग कर सकते हैं, जैसेgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
बर्कस

1
असुरक्षित दृष्टिकोण। कुंजी आसानी से त्रुटि पर लॉग को पूरा करती है। इसके बजाय कसकर स्कोप की गई कुंजी का उपयोग करें।
जोसेफ वासना

53

सबसे पहले, आपको एक व्यक्तिगत एक्सेस टोकन (PAT) बनाने की आवश्यकता है। यह यहाँ वर्णित है: https://help.github.com/articles/creating-an-access-token-for-command-line-use/

Laughably, लेख आपको बताता है कि इसे कैसे बनाया जाए, लेकिन इसके साथ क्या करना है, इसका कोई सुराग नहीं है। लगभग एक घंटे के ट्रॉकिंग डॉक्यूमेंटेशन और स्टैक ओवरफ्लो के बाद, मुझे आखिरकार जवाब मिल गया:

$ 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 ने मुझे प्रलेखन लिंक के साथ सही रास्ते पर रखा।)


इसके लिए धन्यवाद, मैं भी उसी कार्य का सामना कर रहा था
सूर्य प्रकाश पटेल

पूरी तरह से ठीक।
समीम आफताब अहमद

मैंने कई बार इस दृष्टिकोण की कोशिश की, लेकिन मैं उसी मुद्दे का सामना कर रहा हूं। मैंने पीटीए उत्पन्न किया और फिर पुश कमांड निष्पादन के बाद प्रमाणित करने की कोशिश की, अपना उपयोगकर्ता नाम और अपना टोकन डाल दिया। यह अभी भी मुझे बताता है कि क्रेडेंशियल्स गलत हैं। इन चरणों में मुझे क्या याद आ रहा है?
johnny_kb

30

"महल की चाबी" सौंपने से बचने के लिए ...

ध्यान दें कि sigmavirus24 की प्रतिक्रिया के लिए आपको ट्रैविस को काफी विस्तृत अनुमतियों के साथ टोकन देने की आवश्यकता है - चूंकि गिटहब केवल "मेरे सभी सार्वजनिक प्रतिनिधि लिखें" या "मेरे सभी निजी प्रतिनिधि लिखें" जैसे चौड़े स्कोप के साथ टोकन प्रदान करता है।

यदि आप एक्सेस (कुछ और काम के साथ) नीचे कसना चाहते हैं, तो आप ट्रैविस एन्क्रिप्टेड यमल फ़ील्ड्स के साथ संयुक्त GitHub परिनियोजन कुंजी का उपयोग कर सकते हैं।

यहाँ एक स्केच है है कि तकनीक कैसे काम करती है ...

सबसे पहले RSA परिनियोजित कुंजी (थ्रू ssh-keygen) को जेनरेट करें my_keyऔर इसे अपने गिथब रेपो सेटिंग्स में एक परिनियोजन कुंजी के रूप में जोड़ें।

फिर...

$ 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एकीकरण-समय पर अपनी यमल फ़ाइल में जोड़कर अपनी तैनाती कुंजी को डिक्रिप्ट करने के लिए फ़ाइल का उपयोग करें :

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

नोट: अंतिम पंक्ति जीथब की आरएसए कुंजी को पूर्व-आबाद करती है, जो कनेक्शन के समय मैन्युअल रूप से स्वीकार करने की आवश्यकता से बचाती है।


30

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 इस सवाल के अन्य उत्तर अंत में अपने टोकन को .it / config में लिखना होगा, जिसे सुरक्षा जोखिम माना जा सकता है।
जेरोम

महान संदर्भ - txs!
dalcam

प्यारा सा धन्यवाद https: // <mytoken> @mygiturl ने मेरे
.git

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
कमांड

मुझे करना थाgit remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow

क्या यह बुरा विचार नहीं है? टोकन कंसोल इतिहास में कैश नहीं होगा?
TheRealChx101

मेरे लिए git रिमोट ऐड ओरिजिनल https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [
REPO

@ TheRealChx101 आप git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1असुरक्षित git आउटपुट के लॉगिंग से बचने के लिए कुछ का उपयोग कर सकते हैं । लॉग में होने से बचने के लिए एक वैरिएबल में टोकन स्टोर करें। लेकिन इसे कहीं स्टोर करने की जरूरत है। आगे सुरक्षित करने के लिए आप इसे एन्क्रिप्टेड स्टोर कर सकते हैं। यह दृष्टिकोण ट्रेविस सीआई द्वारा समर्थित उदाहरण के लिए है।
kap

3

आम तौर पर मैं ऐसा करता हूं

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

Git_token azure devops में वेरिएबल कॉन्फिगरेशन से पढ़ रहा है।

आप यहाँ मेरा पूरा ब्लॉग पढ़ सकते हैं


1

इस मुद्दे के साथ संघर्ष करने के लिए हमारे बिल्ड लिपि में ओआरजी / आरईपीओ अनुभाग में एक पूरे दिन के कठिन कोडिंग के लिए संघर्ष किया गया, जो कि 'दूरस्थ नहीं मिला' त्रुटि प्राप्त कर रहा था, अंततः उपयोग करने के लिए एक कार्यशील समाधान मिला 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)

  • कोड टोकन (फ्रीस्टाइल) का उपयोग करके रेपो क्लोनिंग पर कोडफ्रेश मार्गदर्शन का अनुसरण करता है
  • परीक्षण किया गया: मैच शब्द पर sed %d%H%M'-123456-whatever'
  • रेपो में वापस धक्का (जो निजी रेपो है )
  • 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 पोर्टल पर लॉगिन करने के लिए उपयोग करते हैं, वीएस कोड सीएलआई / शेल में काम नहीं करता है। आपको नया टोकन बनाकर URL https://github.com/settings/tokens से पैट टोकन को कॉपी करना चाहिए और उस स्ट्रिंग को पासवर्ड के रूप में CLI में पेस्ट करना चाहिए ।


0

यदि आप GitHub Enterprise का उपयोग कर रहे हैं और रेपो को क्लोन कर रहे हैं या आपको एक उपयोगकर्ता नाम / टोकन के लिए संकेत देने के बजाय 403 त्रुटि देता है, तो आप इसका उपयोग कर सकते हैं:

  1. रेपो को हटाओ
  2. कमांड प्रॉम्प्ट खोलें और उस फ़ोल्डर को नेविगेट करें जिसे आप रेपो चाहते हैं
  3. प्रकार:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.