GitHub token ও Git authentication: personal access token, Git Credential Manager, পাসওয়ার্ড ছাড়া push
১৩ আগস্ট ২০২১ থেকে GitHub HTTPS-এ Git কাজের জন্য অ্যাকাউন্টের পাসওয়ার্ড গ্রহণ করে না। এর বদলে লাগে 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 ও পাসওয়ার্ড দিয়ে প্রত্যাখ্যান পান, তবে কারণ টাইপো নয়। ১৩ আগস্ট ২০২১ থেকে GitHub HTTPS-এ Git কাজের জন্য পাসওয়ার্ড দিয়ে লগইন বন্ধ করেছে। এর বদলে লাগে GitHub token (personal access token, PAT) অথবা Git Credential Manager-এর মাধ্যমে browser-এ অনুমোদন।
ত্রুটি বার্তাটি এরকম দেখায়:
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 দূরবর্তী repository-র সঙ্গে দুটি protocol-এর একটি দিয়ে কথা বলে, এবং তার ওপর নির্ভর করে আপনি কীভাবে লগইন করবেন।
| Protocol | Repository-র ঠিকানা | পরিচয় কীভাবে হয় |
|---|---|---|
| HTTPS | https://github.com/user/project.git | Token বা Git Credential Manager (browser দিয়ে লগইন) |
| SSH | git@github.com:user/project.git | SSH key জোড়া: private key আপনার কাছে, public key GitHub সেটিংসে |
SSH key একবার সেট করলে Git আর লগইন বা পাসওয়ার্ড চায় না। তার বানানো ও 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 প্রোগ্রাম দিয়ে অ্যাক্সেসের জন্য পাসওয়ার্ডের জায়গায় দেয়। Classic token ghp_ দিয়ে শুরু হয়, fine-grained token শুরু হয় github_pat_ দিয়ে। Token শুধু একবার দেখানো হয়, বানানোর ঠিক পরে, তাই এটি password manager-এ সংরক্ষণ করুন।
ধাপে ধাপে
- github.com-এ লগইন করুন, ওপরের ডানদিকে আপনার avatar-এ ক্লিক করে Settings খুলুন।
- বাঁ দিকের মেনুর নিচে Developer settings বেছে নিন, তারপর Personal access tokens।
- ধরন বেছে নিন: Fine-grained tokens (প্রস্তাবিত) বা Tokens (classic), এবং নতুন token বানানোর বোতাম চাপুন।
- একটি বোধগম্য নাম দিন (যেমন "laptop, office"), মেয়াদ ও অধিকার ঠিক করুন।
- Generate বোতাম চেপে token এখনই কপি করুন।
Fine-grained না classic
Fine-grained token নির্দিষ্ট repository ও আলাদা অধিকারে সীমাবদ্ধ থাকে। কোড নিয়ে সাধারণ কাজের জন্য repository বেছে নিন এবং repository অধিকারে Contents: Read and write দিন। Clone, pull ও push-এর জন্য এটুকুই যথেষ্ট। যদি কোনো private repository শুধু পড়তে চান, তবে Read-only যথেষ্ট।
Classic token আপনার সব repository-তে একসঙ্গে প্রযোজ্য। Repository-তে push-এর জন্য repo scope লাগে, আর .github/workflows-এর ফাইল বদলাতে অতিরিক্ত workflow। Classic সহজ, কিন্তু ঝুঁকিপূর্ণ: ফাঁস হলে পুরো অ্যাকাউন্ট খোলা পড়ে।
মেয়াদ
GitHub কয়েকটি মেয়াদ দেয় এবং নিজের তারিখও বেছে নিতে দেয়। মেয়াদহীন token বানানো যায়, কিন্তু তা করবেন না: ভুলে যাওয়া স্থায়ী token নিরাপত্তার বড় ফাঁক। ৩০ থেকে ৯০ দিন রাখুন, এবং মেয়াদ শেষ হওয়ার আগে GitHub-এর পাঠানো ইমেইল দেখে নতুন token বানান।
Token দিয়ে git push ও git clone
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 গোপন environment variable দিয়ে দেওয়া হয়, ফাইলে লেখা হয় না। GitHub Actions-এ বর্তমান repository-র জন্য আগে থেকেই GITHUB_TOKEN থাকে, তাই সেখানে আলাদা PAT প্রায়ই লাগে না।
GitLab: token দিয়ে git clone
GitLab-এ token প্রোফাইল সেটিংসের Access tokens অংশে তৈরি হয়; কোড নিয়ে কাজের জন্য read_repository ও write_repository scope লাগে। পদ্ধতি একই: 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) এই helper-গুলোর মধ্যে সবচেয়ে সুবিধাজনক। এটি GitHub ও Microsoft-এর তৈরি ক্রস-প্ল্যাটফর্ম প্রোগ্রাম: প্রথম push-এ এটি লগইন উইন্ডো বা browser খোলে, আপনি GitHub-এ অনুমোদন দেন (two-factor authentication সহ), আর GCM নিজে token পেয়ে তা সিস্টেমের নিরাপদ storage-এ রাখে। এই অবস্থায় token হাতে বানানোর দরকার নেই।
GCM GitHub, GitLab, Bitbucket ও Azure DevOps সমর্থন করে। Git for Windows-এ এটি ডিফল্টভাবে ইনস্টল হয়: ইনস্টলারে credential helper বাছাইয়ের যে বিকল্প আসে, সেটিই এটি।
credential.helper-এর ধরন
| মান | কোথায় সংরক্ষিত হয় | কখন ব্যবহার করবেন |
|---|---|---|
manager | Git Credential Manager: Windows Credential Manager, macOS Keychain, Linux-এ Secret Service | কাজের কম্পিউটারের জন্য প্রস্তাবিত |
osxkeychain | macOS Keychain | Mac-এ Git-এর আদর্শ helper |
cache | মেমোরিতে, ডিফল্ট ১৫ মিনিট | 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
গ্রাফিক্যাল ইন্টারফেসহীন সার্ভারে সহজ উপায় হলো অস্থায়ী 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-এর মতো এন্ট্রি খুঁজে মুছুন। কমান্ড লাইন থেকেও একই কাজ হয়:
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 পাসওয়ার্ড না চেয়েই এই ত্রুটি দেখালে বুঝবেন, পুরনো পাসওয়ার্ড কোথাও সংরক্ষিত আছে: ওপরে বলা উপায়ে মুছুন।
git push: Authentication failed
কারণগুলো আনুমানিক এই ক্রমে আসে: token-এর মেয়াদ শেষ; token বাতিল হয়েছে; fine-grained token-এর এই repository-তে প্রবেশাধিকার নেই, বা Contents অধিকার শুধু পড়ার জন্য; সংরক্ষিত credentials অন্য অ্যাকাউন্টের। Developer settings-এ token-এর মেয়াদ ও অধিকার দেখুন, এবং সংরক্ষিত credentials রিসেট করুন।
remote: Permission denied (403)
লগইন সফল হয়েছে, কিন্তু এই 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-এর
repo-এর বদলে fine-grained token, যা শুধু দরকারি repository-তে থাকে। - মেয়াদ রাখুন এবং নতুন token বানান, অনির্দিষ্টকাল বাড়িয়ে যাবেন না।
- Token commit করবেন না এবং remote-এর ঠিকানায় বসাবেন না। Token পাবলিক repository-তে পৌঁছালে GitHub তা নিজে থেকে বাতিল করতে পারে, তবু তাকে ফাঁস ধরে নিয়ে নিজেও মুছুন।
store-এর বদলে সিস্টেমের storage (GCM, Keychain) ব্যবহার করুন।- এক token, এক মেশিন বা এক কাজ: তাহলে ফাঁস হলে শুধু সেটিই বাতিল করতে হবে।
উপসংহার
HTTPS-এ Git-এর জন্য GitHub-এর পাসওয়ার্ড ২০২১ সাল থেকে কাজ করে না। তিনটি কার্যকর পথ আছে: Git Credential Manager দিয়ে browser-এ লগইন, GitHub token বানিয়ে পাসওয়ার্ডের জায়গায় দেওয়া, অথবা SSH key-তে যাওয়া। Token Settings → Developer settings-এ বানানো হয়, credential.helper তা সংরক্ষণ করে, আর Authentication failed এলে সাধারণত token নতুন করে বানিয়ে পুরনো credentials মুছলেই কাজ হয়। GitHub-এর সঙ্গে যুক্ত হওয়া ও remote repository নিয়ে কাজ এই কোর্সে বাস্তবে শেখানো হয়েছে।
সাধারণ প্রশ্ন
তৈরি হওয়ার পর কি GitHub token আবার দেখা যায়?
না, GitHub token শুধু একবার দেখায়। সেটি সংরক্ষণ না করে থাকলে পুরনোটি মুছে নতুন বানান।
পাবলিক repository clone করতে কি token লাগে?
না, পাবলিক repository authorization ছাড়াই clone ও git pull করা যায়; token লাগে প্রাইভেট repository ও git push-এর জন্য।
Token-এর মেয়াদ শেষ হলে কী হবে?
Git-এ Authentication failed আসতে শুরু করবে। নতুন token বানান (অথবা পুরনোটিতে Regenerate চাপুন), সংরক্ষিত credentials মুছুন, এবং পরের push-এ নতুন token বসান।
GitHub token কি two-factor authentication-এর সঙ্গে কাজ করে?
হ্যাঁ, 2FA চালু থাকলে token-এর প্রয়োজন হয়ই: এটি Git কাজের জন্য পাসওয়ার্ড ও verification code দুটোরই জায়গা নেয়। Browser-এ লগইনে Git Credential Manager 2FA নিজেই সামলায়।
Git লগইন ও পাসওয়ার্ড কোথায় সংরক্ষণ করে?
Git নিজে কিছু সংরক্ষণ করে না, এই কাজ করে credential helper: Windows Credential Manager, macOS Keychain, Linux-এ Secret Service, অথবা helper store হলে ~/.git-credentials ফাইল।
“শূন্য থেকে আত্মবিশ্বাসী ডেভেলপার পর্যন্ত গিট” কোর্সে বিষয়টি অনুশীলনসহ বিস্তারিত শেখানো হয়েছে।
- ইনস্টল এবং কনফিগারেশন: প্রথম চালানোর জন্য Git প্রস্তুত করা
- গিটহাব ও দূরবর্তী রিপোজিটরি: আপনার কোড ক্লাউডে