2FA सक्षम करने के बाद Git प्रमाणीकरण विफल हो जाता है


97

मैंने केवल 2FA सक्षम किया (मैं अपने द्वारा किए गए किसी भी अन्य परिवर्तन के बारे में नहीं सोच सकता) और git ने मेरे उपयोगकर्ता नाम और पासवर्ड के लिए कहा। मैंने दोनों को प्रदान किया, लेकिन वे "गलत" थे। मैंने यहां कई समाधानों की कोशिश की: गिट पुश के लिए उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है, लेकिन यह काम नहीं करता है। विशेष रूप से, जब https से ssh पर स्विच किया जाता है, ssh कुंजी देता है

अनुमति से इनकार (publickey)। घातक: दूरस्थ भंडार से नहीं पढ़ सकता था।

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://mlbileschi@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

कोई सुझाव?


1
"अनुमति से इनकार (publickey)। घातक: दूरस्थ रिपॉजिटरी से पढ़ नहीं सका।" एक अलग समस्या है जिसे आपके खाते के लिए SSH कुंजी सेट करके हल किया जा सकता है: help.github.com/articles/…
Ajedi32

1
अक्सर यह एक 2FA मुद्दा नहीं है, बल्कि इसके बजाय https से git में बदलकर हल किया गया है
SCBuergel.eth

जवाबों:


125

आपको एक पहुंच टोकन जेनरेट करना होगा। आप अपने सेटिंग पेज पर जाकर एक बना सकते हैं ।

यहां छवि विवरण दर्ज करें

कमांड लाइन में अपने एक्सेस टोकन के रूप में इस एक्सेस टोकन का उपयोग करें।


हम्म, मैंने कोशिश की कि सेट-यूआरएल के बाद https, और यह काम नहीं किया। मैंने ssh पर सेट-url वापस करने की कोशिश की, और .ssh / ज्ञात_हॉस्ट्स प्रविष्टि को हटा दिया, लेकिन कोई फायदा नहीं हुआ।
मैक्स बाइलची

क्या आप अपने प्रश्न में कमांड लाइन आउटपुट जोड़ सकते हैं? जिन आदेशों को आप निष्पादित कर रहे हैं उनमें शामिल हैं।
गेरगो एर्दोसी

आउटपुट जोड़ा गया था
मैक्स बाइलची

मेरे पास कुछ अजीब मुद्दे थे जहां मुझे एक क्लोन शुरू करना था और अपने नए एक्सेस टोकन को इनपुट करना था। इसके बाद (यहां तक ​​कि क्लोन खत्म होने का इंतजार किए बिना) मैं अपनी मूल निर्देशिका को अपना नया एक्सेस टोकन देने में सक्षम था जिसे मैं चलाने की कोशिश कर रहा था git pull। संभवतः एक स्थानीय मुद्दा, लेकिन यह किसी की मदद कर सकता है।
sg

The requested URL returned error: 403जब मैं पासवर्ड के लिए टोकन का उपयोग करता हूं तो मुझे मिलता है
stelios

38

एंड-टू-एंड समाधान में 3 चरण होते हैं।

  1. कुडोस से गार्गो एर्दोसी। उनका जवाब काफी हद तक सही है, बस इतना है कि जीथब ने उस सेटिंग पृष्ठ को बदल दिया। 2016 के उत्तरार्ध में, आपको अपने निजी एक्सेस टोकन पेज से एक एक्सेस टोकन जनरेट करना होगा

    यहां छवि विवरण दर्ज करें

    कमांड लाइन में अपने एक्सेस टोकन के रूप में इस एक्सेस टोकन का उपयोग करें।

  2. आप अपने उपयोगकर्ता नाम को अपनी परियोजना के दूरस्थ url में शामिल करके जारी रख सकते हैं। इसे करने का एक तरीका यह है .git/configकि आप urlरेखा को निम्न प्रारूप में संशोधित करें :

    url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git

  3. आप इसे केवल एक समय के लिए चलाकर अपना पासवर्ड जारी रख सकते हैं:

    $ git config credential.helper store

    और फिर आपका भविष्य git पासवर्ड (s) प्रारूप का उपयोग करके ~ / .it-क्रेडेंशियल्स, प्लेनटेक्स्ट में संग्रहीत किया जाएगा https://user:PlaintextPassword@example.com

    प्लेनटेक्स्ट में पासवर्ड (पासवर्ड) जमा करना आमतौर पर सुरक्षा जोखिम के रूप में माना जाएगा। लेकिन इस 2FA मामले में, क्रेडेंशियल आपका वास्तविक पासवर्ड नहीं है, यह एक बेतरतीब ढंग से उत्पन्न स्ट्रिंग है। तो यह उतना ही सुरक्षित है जितना कि ssh Private key को पासफ़्रेज़-कम ssh निजी कुंजी का उपयोग करना। गुफा: ध्यान रखें कि, यदि आप इस मशीन पर 2FA के बिना किसी अन्य git खाते (खातों) का उपयोग करते हैं, तो वे असली पासवर्ड भी सादे में संग्रहीत किए जाएंगे।

PS: वैकल्पिक रूप से, आप पासफ़्रेज़-रक्षित ssh निजी कुंजी का उपयोग करके ssh- आधारित लॉगिन का उपयोग करना चुन सकते हैं, जो अधिक सुरक्षित और कम सुविधाजनक होगा, लेकिन यह इस उत्तर के दायरे से बाहर है।


1
इसने मेरे लिए काम किया और मुझे संयुक्त राष्ट्र में टाइप करने और हर बार pw के साथ बातचीत करने में सक्षम नहीं होने दिया। मैं cygwin के साथ विंडोज़ का उपयोग करता हूं और काम करने के लिए ssh कीज़ प्राप्त करने में कभी सक्षम नहीं था - यह करता है!
liltitus27

पिछले पैरा के बारे में: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- यह बिल्कुल सच नहीं है । SSH कीज़ को बॉक्स के बाहर पासफ़्रेज़ द्वारा आसानी से संरक्षित किया जा सकता है । सादा ~./git-credentials- बिल्कुल सुरक्षित नहीं है!
मैक्सकोरोविच

इसके अलावा, इस एपीआई कुंजी को प्लेटेक्स्ट फ़ाइल में संग्रहीत किया जाता है: GitHub API (स्कोप पर निर्भर करता है, लेकिन इस पर निर्भर करता है, लेकिन हर कोई, जिसके पास एपिक है, के पास रेपो के सोर्स कोड तक पहुंच होगी) और कोई भी git ऑपरेशन (पुश, पुल) करें। दूसरे शब्दों में, इस तरह की प्लेनटेक्स्ट फ़ाइल एक भयानक उपहार है, खासकर, अगर आपके पास निजी रिपॉजिटरी तक पहुंच है (शायद, वे बहुत जल्द सार्वजनिक हो जाएंगे)
मैक्सकोरुकोव

@maxkoryukov ठीक है, कैसे के बारे में मैं पिछले वाक्य को "पासफ़्रेज़-कम ssh निजी कुंजी का उपयोग करते हुए सुरक्षित" के रूप में बताता हूं? क्योंकि चरण 3 का पूरा बिंदु एक पासवर्ड के लिए संकेत को दरकिनार करने की कोशिश कर रहा है (यह मानते हुए कि आप अपने कंप्यूटर पर काम कर रहे हैं, निश्चित रूप से)। ऐसे मामले में, यदि कोई आपकी ~ / .गित-क्रेडेंशियल्स या आपके पासफ़्रेज़-कम ssh निजी कुंजी की पकड़ प्राप्त करने का प्रबंधन करता है, तो परिणाम समान होगा। मैं आपसे सहमत हूं कि एक पासफ़्रेज़-संरक्षित ssh कुंजी अधिक सुरक्षित (और कम सुविधाजनक) होगी।
रायलूओ


16

मुझे भी ऐसी ही समस्या का समाधान करना पड़ा था। मुझे अपने उपयोगकर्ता नाम को शामिल करने के लिए git कमांड में उपयोग किए गए url को बदलना पड़ा।

git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git

इसके बाद जब यह पीडब्लू से कहता है कि आप गर्गो एर्दोसी के जवाब में दिए गए निर्देशों का पालन करके बनाए गए एक्सेस टोकन का उपयोग करें।


1
यह मेरे लिए काम करता है, लेकिन अगर मैं git remote set-url --push originउसी मूल्य के साथ सेट करने की कोशिश करता हूं , तो git push origin masterअभी भी विफल रहता है।
डेनियल

दूरदराज के रास्ते में मेरे उपयोगकर्ता नाम को शामिल करने के बाद भी मेरे लिए काम करता है जैसा कि जेस्टर द्वारा वर्णित है।
इवो ​​नोव

यह मेरे लिए विंडोज़ कमांड प्रॉम्प्ट में काम नहीं करता था, लेकिन अंदर git-bashने ठीक काम किया
विंसेंट टैंग

उबंटू में मेरे लिए पूरी तरह से काम किया। धन्यवाद!
रयान रसेल

12

लिनक्स पर, आप SSH कुंजी का उपयोग करके अपनी GitHub पहचान को प्रमाणित कर सकते हैं।

1) एक नया SSH कुंजी ( स्रोत ) उत्पन्न करना

टर्मिनल खोलें।

नीचे दिए गए पाठ को पेस्ट करें, अपने GitHub ईमेल पते पर प्रतिस्थापित।

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

यह एक नई ssh कुंजी बनाता है, जो लेबल के रूप में प्रदान की गई ईमेल का उपयोग करती है।


2) कुंजी को अपने GitHub खाते से जोड़ना

टर्मिनल खोलें और जनरेट की गई कुंजी को कॉपी करें

cat ~/.ssh/id_rsa.pub

के रूप में उत्पादन करना चाहिए

ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com

Https://github.com/settings/keys पर नेविगेट करें और New SSH Keyइसे शीर्षक दें और सार्वजनिक कुंजी को कॉपी-पेस्ट करें।

यहां छवि विवरण दर्ज करें


3) से मूल git बदलें https://करने के लिएssh

cdअपने रिपॉजिटरी स्थान और प्रकार के लिए , टर्मिनल खोलें

git remote set-url origin git@github.com:<github username>/<repository name>

1
सच है, लेकिन सवाल के साथ अप्रासंगिक। के माध्यम से प्रमाणित httpsकभी-कभी उपयोगी होता है, उदाहरण के लिए जब httpsअपने कांटे को ऊपर रखते हुए ऊपर की ओर रखते हैं ssh, ताकि आप गलती से ऊपर की ओर धक्का देने से बचें, क्योंकि httpsआप पासवर्ड के लिए कहेंगे और आपको याद दिलाएंगे कि आपने गलत रेपो को लक्षित किया है
stelios

SSH का उपयोग करने के लिए आपको linux की आवश्यकता नहीं है। एसएसएच का उपयोग करना विंडोज के लिए बेहतर जवाब है और साथ ही मुझे लगता है। विंडोज़ के लिए आमतौर पर इस्तेमाल किया जाने वाला उपकरण पैजेंट और पुट्टी है
एंड्रयू

3

यह मेरे लिए काम किया:

  • [Your-git-repo] /। Git / config पर जाएँ

  • के तहत [remote "origin"]बदलें URLhttp Git करने के लिए प्रोटोकॉल से कुंजी।

उदाहरण

यदि का मान urlहै https://github.com/ उसमें कितना परिवर्तन .gitgit@github.com:<repo-url>.git


3

यदि आप पहले से ही ssh कीज़ का उपयोग कर रहे हैं, तो 2FA सक्षम करने के बाद यह आपको SSH के साथ रिमोट पढ़ने / लिखने के लिए लागू करेगा। आपको वास्तव में व्यक्तिगत टोकन जोड़ने की ज़रूरत नहीं है बल्कि अपने मौजूदा SSH कुंजी जोड़ी का उपयोग करते रहना चाहिए।

बस अपने दूरस्थ url को HTTPS से SSH में बदलें:

git remote set-url origin git@github.com:<github-username>/<repo-name>

0

गितुब पर 2FA सक्षम करने के बाद इसने मेरे लिए काम किया:

  1. एक निजी एक्सेस टोकन बनाएँ: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
    नोट: टोकन के लिए सही अनुमतियों का चयन करना याद रखें।

  2. रन:
    git clone https://github.com/username/repo.git
    उपयोगकर्ता नाम: your_username
    पासवर्ड:your_token

आगे पढ़े: https://help.github.com/en/github/use-git/which-remote-url-should-i-use


0

मैं मौजूदा रेपो पर इस समस्या का सामना कर रहा था जब मैंने अपने एक निजी रेपो के लिए 2FA (दो कारक प्रमाणीकरण) सक्षम किया था। मैं अपने ubuntu 19.0 टर्मिनल पर नीचे दिए गए चरणों को हल करने में सक्षम था: -

  1. अपनी ssh कुंजी को github में जोड़ें ताकि आपको अपना पासवर्ड फिर से उपयोग करने की आवश्यकता न हो, क्योंकि अब आपने 2FA सक्षम किया है। यह आसानी से कैसे करें, यह जानने के लिए github पेज पर जाएँ
  2. एक बार कुंजी जोड़ने के बाद, अपने टर्मिनल पर जाएं, और मूल यूआरएल को अपडेट करें

    git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>

यह है। यह मदद करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.