गाइड

GitHub token और Git authentication: personal access token, Git Credential Manager, बिना पासवर्ड push

अपडेट किया गया: · Skillaria.Top

13 अगस्त 2021 से GitHub HTTPS पर Git operations के लिए खाते का पासवर्ड स्वीकार नहीं करता। उसकी जगह GitHub token (personal access token) या Git Credential Manager चाहिए, जो browser में लॉगिन करवाता है और credentials खुद सेव रखता है। Token github.com पर Settings → Developer settings में बनता है, git push या git clone में पासवर्ड की जगह डाला जाता है, और उसे credential.helper सेव करता है।

Git अब GitHub का पासवर्ड क्यों नहीं लेता

अगर git push में github.com का login और पासवर्ड डालने पर अस्वीकृति मिलती है, तो वजह टाइपो नहीं है। 13 अगस्त 2021 से GitHub ने HTTPS पर Git operations के लिए पासवर्ड से लॉगिन बंद कर दिया। उसकी जगह GitHub token (personal access token, PAT) या Git Credential Manager के जरिए browser में authorization चाहिए।

त्रुटि संदेश कुछ ऐसा दिखता है:

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/... for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/user/project.git/'

कारण सीधा है: खाते का पासवर्ड पूरी पहुँच देता है, उसे किसी एक repository तक सीमित नहीं किया जा सकता, और उसे रद्द करना मुश्किल है। Token किसी काम के लिए बनता है, उसकी समय सीमा और अधिकारों का सेट होता है, और लीक होने पर उसे एक मिनट में हटाया जा सकता है, पासवर्ड बदले बिना। GitLab और Bitbucket भी यही रास्ता अपना चुके हैं, इसलिए नीचे बताई बातें उन पर भी लागू होती हैं।

Authorization के दो तरीके: HTTPS और SSH

Git remote repository से दो protocols में से किसी एक से बात करता है, और इसी से तय होता है कि आप कैसे लॉगिन करेंगे।

ProtocolRepository का पतापहचान कैसे होती है
HTTPShttps://github.com/user/project.gitToken या Git Credential Manager (browser से लॉगिन)
SSHgit@github.com:user/project.gitSSH key का जोड़ा: private key आपके पास, public key GitHub सेटिंग में

SSH key एक बार सेट होती है, उसके बाद Git login या पासवर्ड नहीं माँगता। उसका बनाना और GitHub पर जोड़ना Git सेटअप वाले लेख में विस्तार से है। यहाँ हम HTTPS पर ध्यान देंगे, क्योंकि नए उपयोगकर्ता पासवर्ड का सवाल वहीं सबसे ज़्यादा देखते हैं। आपकी repository किस protocol से जुड़ी है, यह इस कमांड से पता चलता है:

git remote -v
origin  https://github.com/user/project.git (fetch)
origin  https://github.com/user/project.git (push)

GitHub token कैसे बनाएँ (personal access token)

Personal access token एक लंबी यादृच्छिक स्ट्रिंग है, जो GitHub प्रोग्रामेटिक access के लिए पासवर्ड की जगह देता है। Classic tokens ghp_ से शुरू होते हैं, fine-grained tokens github_pat_ से। Token केवल एक बार दिखता है, बनने के तुरंत बाद, इसलिए उसे password manager में सेव कर लें।

चरण दर चरण

  1. github.com पर लॉगिन करें, ऊपर दाईं ओर अपने avatar पर क्लिक करें और Settings खोलें।
  2. बाईं मेन्यू के नीचे Developer settings चुनें, फिर Personal access tokens।
  3. प्रकार चुनें: Fine-grained tokens (सुझाया गया) या Tokens (classic), और नया token बनाने का बटन दबाएँ।
  4. एक साफ़ नाम दें (जैसे "laptop, office"), समय सीमा और अधिकार चुनें।
  5. Generate बटन दबाएँ और token तुरंत कॉपी करें।

Fine-grained या classic

Fine-grained token चुनी हुई repositories और अलग-अलग अधिकारों तक सीमित रहता है। सामान्य code के काम के लिए repositories चुनें और repository अधिकारों में Contents: Read and write दें। clone, pull और push के लिए इतना काफ़ी है। अगर केवल किसी निजी repository को पढ़ना है, तो Read-only काफ़ी है।

Classic token आपके सारे repositories पर एक साथ लागू होता है। Repository में push के लिए repo scope चाहिए, और .github/workflows की फ़ाइलें बदलने के लिए अतिरिक्त workflow। Classic आसान है, पर खतरनाक भी: लीक होने पर पूरे खाते तक पहुँच खुल जाती है।

समय सीमा

GitHub कई समय सीमाएँ देता है और अपनी तारीख चुनने भी देता है। बिना समय सीमा का token बनाया जा सकता है, पर ऐसा न करें: भूला हुआ स्थायी token सुरक्षा का बड़ा छेद है। 30 से 90 दिन रखें और समाप्ति से पहले GitHub द्वारा भेजे गए ईमेल पर नया token बनाएँ।

Git push और git clone token के साथ

Token का उपयोग जितना दिखता है उससे आसान है: Git "Password" पूछता है, और आप पासवर्ड की जगह token डाल देते हैं।

$ git push origin main
Username for 'https://github.com': your-login
Password for 'https://your-login@github.com': <token यहाँ डालें>

Terminal में पासवर्ड के अक्षर नहीं दिखते, यह सामान्य है। Token paste करें और Enter दबाएँ। Windows के Git Bash में paste के लिए Shift+Insert या दायाँ क्लिक काम करता है।

Git clone with token

निजी repository भी इसी तरह clone होती है: git clone login और token पूछेगा। अगर कोई सवाल न पूछा जाए (जैसे किसी script में), तो token सीधे पते में डाला जा सकता है:

git clone https://your-login:<TOKEN>@github.com/user/project.git

इसकी कमी: पता token समेत .git/config में सेव हो जाता है और shell history में भी जा सकता है। Clone के बाद token पते से हटा दें:

git remote set-url origin https://github.com/user/project.git

CI सिस्टम में token secret environment variables से दिया जाता है, फ़ाइलों में नहीं लिखा जाता। GitHub Actions में वर्तमान repository के लिए पहले से GITHUB_TOKEN मौजूद होता है, इसलिए वहाँ अलग PAT अक्सर नहीं चाहिए।

GitLab: token से git clone

GitLab में token प्रोफ़ाइल सेटिंग के Access tokens भाग में बनता है; कोड के काम के लिए read_repository और write_repository scopes चाहिए। तरीका वही है: GitLab का username, और पासवर्ड की जगह token।

git clone https://oauth2:<TOKEN>@gitlab.com/group/project.git

GitLab किसी भी personal token के लिए oauth2 नाम स्वीकार करता है; उसकी जगह अपना username भी लिख सकते हैं।

Git pull और fetch

सार्वजनिक repository के लिए git pull और git clone बिना authorization के चलते हैं। Login और token केवल निजी repository या git push के समय माँगे जाते हैं। अगर किसी सार्वजनिक प्रोजेक्ट में pull पासवर्ड माँगे, तो अक्सर पते में गलती होती है: GitHub गायब repository और निजी repository पर एक जैसा जवाब देता है।

Git Credential Manager क्या है

हर push पर token डालना असुविधाजनक है। यह काम credential helper संभालता है, एक सहायक प्रोग्राम जिसे Git को credentials चाहिए होने पर बुलाता है। Git उसे server का पता देता है, और helper अपने भंडार से login और पासवर्ड (या token) लौटाता है।

Git Credential Manager (GCM) ऐसे helpers में सबसे सुविधाजनक है। यह GitHub और Microsoft का क्रॉस-प्लेटफ़ॉर्म प्रोग्राम है: पहले push पर वह लॉगिन विंडो या browser खोलता है, आप GitHub पर authorize करते हैं (two-factor authentication समेत), और GCM token खुद पाकर उसे सिस्टम की सुरक्षित storage में रख देता है। इस स्थिति में token हाथ से बनाने की ज़रूरत नहीं।

GCM GitHub, GitLab, Bitbucket और Azure DevOps को सपोर्ट करता है। Git for Windows में यह डिफ़ॉल्ट रूप से इंस्टॉल होता है: यही वह विकल्प है जो installer में credential helper चुनने पर दिखता है।

credential.helper के प्रकार

मानकहाँ सेव होता हैकब उपयोग करें
managerGit Credential Manager: Windows Credential Manager, macOS Keychain, Linux में Secret Serviceकाम के कंप्यूटर के लिए सुझाया गया विकल्प
osxkeychainmacOS KeychainMac पर Git का मानक helper
cacheमेमोरी में, डिफ़ॉल्ट 15 मिनटLinux सर्वर जहाँ token डिस्क पर न रखना हो
store~/.git-credentials में साफ़ टेक्स्ट मेंकेवल अलग-थलग मशीनों पर; फ़ाइल तक पहुँच वाला कोई भी token पढ़ सकता है

Windows, macOS और Linux पर Git authorization सेटअप

देखें कि कौन-सा helper पहले से सेट है:

git config --show-origin --get-all credential.helper

Windows

Git इंस्टॉल करते समय डिफ़ॉल्ट सेटिंग रखी हो, तो GCM पहले से काम करता है: पहले push पर Git Bash, PowerShell या VS Code में GitHub लॉगिन विंडो खुलेगी। Helper सेट न हो तो हाथ से चालू करें:

git config --global credential.helper manager

macOS

Mac पर Git आमतौर पर osxkeychain इस्तेमाल करता है: एक बार डाला गया token Keychain में चला जाता है। Browser से लॉगिन चाहिए तो Git Credential Manager इंस्टॉल करें (Homebrew से: brew install --cask git-credential-manager), वह अपने आप सेटिंग में खुद को जोड़ लेता है।

Linux

Linux पर GCM अलग से इंस्टॉल होता है (.deb पैकेज या प्रोजेक्ट के releases से archive), फिर उसे configure करके storage चुनें:

git-credential-manager configure
git config --global credential.credentialStore secretservice

बिना graphical interface वाले सर्वर पर सरल तरीका अस्थायी cache है:

git config --global credential.helper 'cache --timeout=3600'

GitHub के लिए विकल्प: gh auth login

अगर GitHub CLI इंस्टॉल है, तो gh auth login browser से लॉगिन करवाता है, और gh auth setup-git Git को सेट करता है ताकि वह credentials gh से ले। "Git Bash में लॉगिन" का यह आसान एक-कमांड तरीका है।

सेव किया गया Git पासवर्ड या token कैसे रीसेट करें

सबसे आम स्थिति: token की समय सीमा खत्म हो गई या आपने खाता बदला, और Git पुराने डेटा भेजता रहता है, जिससे Authentication failed आता है। समाधान है सेव की गई एंट्री हटाना, तब अगले push पर Git फिर से पूछेगा।

सार्वभौमिक कमांड

किसी भी helper के साथ काम करता है:

printf "protocol=https\nhost=github.com\n\n" | git credential reject

Windows पर git reset credentials

"Control Panel" → "Credential Manager" → "Windows Credentials" खोलें, git:https://github.com जैसी एंट्री ढूँढकर हटाएँ। Command line से भी यही होता है:

cmdkey /list | findstr git
cmdkey /delete:git:https://github.com

GCM इस्तेमाल हो रहा हो, तो उसका अपना लॉगआउट कमांड भी है: git credential-manager github logout <login>।

macOS

"Keychain Access" खोलें, github.com वाली "Internet password" एंट्री ढूँढकर हटाएँ। या terminal से:

git credential-osxkeychain erase
host=github.com
protocol=https

आखिरी पंक्ति के बाद एक बार और Enter दबाएँ, ताकि खाली पंक्ति भेजी जाए।

Linux और store

store के लिए ~/.git-credentials से github.com वाली पंक्ति हटाएँ, और cache के लिए git credential-cache exit चलाएँ।

Authorization की त्रुटियाँ और उनके हल

Support for password authentication was removed

आपने खाते का पासवर्ड डाला है। Token बनाएँ और उसे Password वाले खाने में डालें, या Git Credential Manager सेट करें। अगर त्रुटि बिना पासवर्ड माँगे आती रहे, तो पुराना पासवर्ड सेव है: उसे ऊपर बताए तरीके से हटाएँ।

git push: Authentication failed

कारण आम तौर पर इस क्रम में होते हैं: token की समय सीमा खत्म हो गई; token रद्द हो गया; fine-grained token को इस repository की पहुँच नहीं है या Contents का अधिकार केवल पढ़ने का है; सेव किए गए credentials किसी दूसरे खाते के हैं। Developer settings में token की समय सीमा और अधिकार जाँचें, और सेव किए credentials रीसेट करें।

remote: Permission denied (403)

Login सफल है, पर आपके खाते को इस repository में लिखने का अधिकार नहीं है। मालिक को आपको Collaborators में जोड़ना होगा, या आप अपने fork और pull request से काम करें।

Repository not found

निजी repository के लिए GitHub यह नहीं बताता कि वह मौजूद है या नहीं, इसलिए गलत token पर भी "not found" आता है। git remote -v से पता जाँचें और token के अधिकार देखें।

Git clone हर बार पासवर्ड माँगता है

Credential helper सेट नहीं है। manager या osxkeychain चालू करें: पहली सफल एंट्री के बाद Git दोबारा नहीं पूछेगा। दूसरा रास्ता SSH पर जाना है।

Token सुरक्षित रखने के तरीके

  • कम से कम अधिकार दें: classic token के repo की जगह fine-grained token जो केवल ज़रूरी repositories पर हो।
  • समय सीमा रखें और token नया बनाएँ, उसे अनिश्चित काल तक बढ़ाते न रहें।
  • Tokens को commit न करें और remote के पते में न डालें। अगर token सार्वजनिक repository में पहुँच गया, तो GitHub उसे अपने आप रद्द कर सकता है, लेकिन उसे लीक मानकर खुद भी हटाएँ।
  • सिस्टम storage (GCM, Keychain) का उपयोग करें, store का नहीं।
  • एक token, एक मशीन या एक काम: तब लीक होने पर केवल वही token रद्द करना होगा।

निष्कर्ष

HTTPS पर Git के लिए GitHub का पासवर्ड 2021 से काम नहीं करता। तीन रास्ते चलते हैं: Git Credential Manager से browser में लॉगिन, GitHub token बनाकर पासवर्ड की जगह डालना, या SSH key पर जाना। Token Settings → Developer settings में बनता है, उसे credential.helper सेव करता है, और Authentication failed आने पर आमतौर पर token नया बनाने और पुराने credentials हटाने से काम बन जाता है। GitHub से जुड़ना और remote repositories के साथ काम इस कोर्स में व्यवहार में सिखाया गया है।

अक्सर पूछे जाने वाले प्रश्न

क्या बनने के बाद GitHub token दोबारा देखा जा सकता है?

नहीं, GitHub token केवल एक बार दिखाता है। अगर वह सेव नहीं हुआ, तो पुराना token हटाएँ और नया बनाएँ।

क्या सार्वजनिक repository को clone करने के लिए token चाहिए?

नहीं, सार्वजनिक repositories बिना authorization के clone और git pull होती हैं; token निजी repositories और git push के लिए चाहिए।

Token की समय सीमा खत्म होने पर क्या होगा?

Git को Authentication failed मिलने लगेगा। नया token बनाएँ (या पुराने पर Regenerate दबाएँ), सेव किए credentials हटाएँ, और अगले push पर नया token डालें।

क्या GitHub token two-factor authentication के साथ काम करता है?

हाँ, 2FA होने पर token की ज़रूरत पड़ती ही है: वह Git operations के लिए पासवर्ड और verification code दोनों की जगह लेता है। Browser से लॉगिन में Git Credential Manager 2FA खुद संभाल लेता है।

Git login और पासवर्ड कहाँ सेव करता है?

Git खुद कुछ सेव नहीं करता, यह काम credential helper करता है: Windows Credential Manager, macOS Keychain, Linux में Secret Service, या helper store के साथ ~/.git-credentials फ़ाइल।

इस विषय को वीडियो में सीखें

यह विषय “गिट: शुरुआत से आत्मविश्वासी डेवलपर तक” कोर्स में अभ्यास के साथ विस्तार से समझाया गया है।

कोर्स पर जाएँ