12 β Autentifikatsiya: SSH va token¶
β¬ οΈ Oldingi: 11 β Remote: clone, push, fetch, pull Β· π README Β· Keyingi: 13 β Pull Request va code review β‘οΈ
Bu bobda: GitHub sizdan kimligingizni qanday so'rashini va nega oddiy parol endi ishlamasligini tushunamiz. Ikki zamonaviy yo'lni o'rganamiz: HTTPS + Personal Access Token (PAT β shaxsiy kirish tokeni) va SSH kalit. ssh-keygen bilan kalit juftini yasaymiz, ochiq kalitni GitHubga qo'yamiz,
ssh -Tbilan tekshiramiz, PAT yaratamiz va xavfsiz saqlaymiz, credential helper (parolni eslab qoluvchi yordamchi) nimaligini ko'ramiz,git remote set-urlbilan HTTPS va SSH orasida almashamiz. Yo'l-yo'lakay 2FA va eng muhimi β sirni hech qachon commit qilmaslik haqida gaplashamiz.
Muammo¶
Tasavvur qiling: diplom loyihangizni GitHubga birinchi marta yubormoqchisiz. 11-bobdagidek hammasini tayyorladingiz:
Va terminalda quyidagi chiqadi:
Parolingizni yozasiz (ekranda hech narsa ko'rinmaydi β bu normal), Enter bosasiz va... xato:
remote: Support for password authentication was removed on August 13, 2021.
remote: Please use a personal access token instead.
fatal: Authentication failed for 'https://github.com/oqil/loyiha.git/'
Ko'pchilik aynan shu yerda taqalib qoladi. "Parolim to'g'ri-ku, nega ishlamayapti?" Sababi oddiy: GitHub 2021-yildan beri akkaunt parolini push uchun qabul qilmaydi. Parol o'g'irlansa, butun akkauntingiz ketadi β shuning uchun GitHub xavfsizroq usulga o'tdi.
Ikki to'g'ri yo'l bor, ikkalasi ham shu bobda:
- HTTPS + Personal Access Token (PAT) β parol o'rniga maxsus, cheklangan huquqli "kalit-so'z" ishlatasiz.
- SSH kalit β kompyuteringizda maxfiy kalit, GitHubda ochiq kalit; parol umuman yozilmaydi.
π Avval nimani tanlashni hal qilaylik: yangi boshlovchi va bitta kompyuterda ishlaydigan bo'lsangiz β SSH eng qulay (bir marta sozlaysiz, keyin parolni butunlay unutasiz). Boshqalar kompyuteridan yoki vaqtinchalik muhitda ishlasangiz β token qulayroq. Quyida ikkalasini ham o'rgatamiz.
Nega umuman autentifikatsiya kerak?¶
GitHub β internetda ochiq turgan server. Agar push qilish uchun hech qanday tekshiruv bo'lmasa, dunyoning istalgan odami sizning repozitoriyangizga kod yuborib, tarixini buzib tashlardi. Shuning uchun GitHub har bir push'da bitta savol beradi: "Sen rostdan ham shu akkaunt egasimisan?"
- O'qish (clone, fetch, pull) β agar repozitoriy public (ochiq) bo'lsa, autentifikatsiyasiz ham ishlaydi. Hamma o'qiy oladi.
- Yozish (push) va private (yopiq) repozitoriyni o'qish β har doim kimligingizni isbotlashni talab qiladi.
π‘ Demak token yoki SSH kalit β bu sizning "raqamli pasportingiz". Uni ishonchli saqlash kerak, xuddi uy kalitidek.
SSH kalit qanday ishlaydi¶
SSH (Secure Shell β xavfsiz aloqa kanali) kalit jufti tushunchasiga asoslanadi. Bitta buyruq ikkita fayl yaratadi:
- Maxfiy kalit (private key, masalan
id_ed25519) β faqat sizning kompyuteringizda qoladi. Hech kimga bermaysiz, hech qayerga yuklamaysiz. Bu uy kalitining o'zi. - Ochiq kalit (public key,
id_ed25519.pub) β buni GitHubga qo'yasiz. Bu β eshikdagi qulf: hamma ko'rsa ham zarari yo'q, faqat sizning maxfiy kalitingiz uni ochadi.
Push qilganingizda GitHub va kompyuteringiz "qo'l berib ko'rishadi" (handshake): GitHub ochiq kalit bilan bir topshiriq beradi, kompyuteringiz uni faqat maxfiy kalit bilan yechadi. To'g'ri yechsa β kirasiz. Maxfiy kalit kompyuterdan hech qachon chiqmaydi, shu sabab bu usul juda xavfsiz.
π Nega ed25519? Bu β zamonaviy, qisqa va kuchli kalit turi (eski rsa ham bor, lekin uzun va sekinroq). 2026-yilda yangi kalit yaratayotgan bo'lsangiz, doim ed25519 ni tanlang.
1-yo'l: SSH kalit yaratish¶
Avval kompyuteringizda kalit allaqachon bormi β tekshiramiz:
Agar ro'yxatda id_ed25519 va id_ed25519.pub ko'rinsa, kalitingiz allaqachon bor β ssh-keygen qadamini o'tkazib yuborsangiz ham bo'ladi. ~ belgisi β bu uy katalogingiz (Windowsda C:\Users\<ism>, masalan C:\Users\oqil).
Yangi kalit yaratamiz:
Buyruqni o'qish: -t ed25519 β kalit turi, -C "..." β izoh (odatda emailingiz, kalitni keyin tanib olish uchun). Buyruq uchta savol beradi:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/c/Users/oqil/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
- Faylga yo'l β shunchaki Enter bosing (standart joy to'g'ri).
- Passphrase (parol-ibora) β kalitning ustiga qo'shimcha parol. Boshlovchi uchun bo'sh qoldirib (faqat Enter) o'tsa ham bo'ladi; ishonchliroq bo'lishni istasangiz, qisqa ibora kiriting.
Natijada quyidagiga o'xshash chiqadi (bu rost ishlaydigan kalit, har safar boshqacha bo'ladi):
Your identification has been saved in /c/Users/oqil/.ssh/id_ed25519
Your public key has been saved in /c/Users/oqil/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:YRZ2El9oX0CUTRn6K6MowLRnGXiD/8GmGqSDQKTlOnc sizning@email.com
Endi ikkita fayl tayyor: id_ed25519 (maxfiy β tegmang) va id_ed25519.pub (ochiq β GitHubga qo'yamiz).
π β id_ed25519 (.pubsiz) faylni hech qachon hech kimga yubormang, ekran ulashganda ko'rsatmang, chatga tashlamang. β
Faqat .pub bilan tugaydigan ochiq kalitni ulashasiz.
Ochiq kalitni nusxalash¶
GitHubga qo'yish uchun ochiq kalit matnini ko'chirib olish kerak. Uni ekranga chiqaramiz:
Bitta uzun qator chiqadi:
ssh-ed25519 dan boshlab emailingizgacha β hammasini belgilang va nusxalang (Ctrl+C). Boshida yoki oxirida bo'sh joy qolmasin.
π‘ Windowsda buni to'g'ridan-to'g'ri clipboardga ko'chirish mumkin:
Endi nusxa olingan, GitHubga o'tamiz.
Ochiq kalitni GitHubga qo'shish¶
- GitHubga kiring, o'ng yuqoridagi avataringizni bosing -> Settings.
- Chap menyuda SSH and GPG keys ni tanlang.
- New SSH key tugmasini bosing.
- Title β kalitni tanib olish uchun nom, masalan
Uy noutbugi. - Key type β
Authentication Key(standart). - Key maydoniga yuqorida nusxalagan matnni qo'ying (Ctrl+V).
- Add SSH key ni bosing (GitHub paroli yoki 2FA so'rashi mumkin).
Aloqani tekshirish: ssh -T¶
Hammasi to'g'ri bog'langanini bitta buyruq aytib beradi:
Birinchi marta ishlatsangiz, ogohlantirish chiqadi (GitHub serverini birinchi marta ko'rayapti):
The authenticity of host 'github.com (140.82.x.x)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
yes deb yozib Enter bosing. So'ng muvaffaqiyat xabari:
β
"Hi <sizning_username>! You've successfully authenticated" β aynan shu jumla SSH ishlayotganini bildiradi. "GitHub does not provide shell access" qismi xato emas β bu shunchaki "GitHub serverida terminal ochib o'tira olmaysiz" degani, bizga kerak ham emas.
π Agar git@github.com: Permission denied (publickey) chiqsa β GitHub kalitingizni tanimadi. Tez-tez uchraydigan sabablar: ochiq kalit GitHubga qo'shilmagan, noto'g'ri matn (bo'sh joy yoki yarmi) qo'yilgan, yoki maxfiy kalit ~/.ssh da emas. Ochiq kalitni qayta nusxalab, GitHubdagi yozuvni tekshiring.
SSH remote'dan foydalanish¶
Endi push'da hech qanday parol so'ralmaydi. Yangi loyihani SSH manzili bilan clone qilasiz:
E'tibor bering: SSH manzili git@github.com: bilan boshlanadi (HTTPSdagi https://github.com/ emas). GitHub repozitoriy sahifasida Code tugmasini bosib, SSH yorlig'ini tanlasangiz, aynan shu manzilni ko'rasiz.
Allaqachon HTTPS bilan clone qilgan loyihangiz bo'lsa, uni SSHga o'tkazasiz (bu haqda quyida batafsil). Endi git push shunchaki ishlaydi:
Parol yo'q, token yo'q β bir marta sozlab, butunlay unutdingiz.
2-yo'l: Personal Access Token (PAT)¶
SSH sozlay olmaydigan holatlar bor (masalan ish kompyuteri SSH portini bloklagan, yoki vaqtincha boshqa mashinada ishlayapsiz). Bunda HTTPS + token ishlatasiz. Token β bu akkaunt parolingiz emas, balki maxsus, cheklangan huquqli, muddati bor "vaqtinchalik parol".
GitHubda ikki xil token bor:
| Tur | Tavsif | Tavsiya |
|---|---|---|
| Fine-grained token | Aniq repozitoriy va aniq huquqlar tanlanadi | β Yangi loyihalar uchun |
| Classic token | Keng, scope (huquq doirasi) bo'yicha | Eski oqimlar, ba'zi vositalar talab qilsa |
Fine-grained token yaratish (tavsiya etiladi):
- Settings -> chap menyuda eng pastdagi Developer settings.
- Personal access tokens -> Fine-grained tokens -> Generate new token.
- Token name β masalan
noutbuk-push. - Expiration β amal qilish muddati, masalan 90 kun (muddatsiz tokendan saqlaning).
- Repository access β
Only select repositoriestanlab, kerakli loyihani belgilang. - Permissions -> Repository permissions -> Contents ni
Read and writeqiling (push uchun shu yetarli). - Generate token ni bosing.
π Token bir martagina to'liq ko'rsatiladi: github_pat_11ABCDEF.... Shu zahoti nusxalab oling va xavfsiz joyga (parol menejeriga) saqlang. Sahifani yopgach, tokenni boshqa hech qachon ko'ra olmaysiz β faqat yangisini yaratishingiz mumkin.
Tokenni ishlatish: push qilganda Username/Password so'ralganda:
Username β GitHub username'ingiz, Password o'rniga esa tokenni qo'ying (akkaunt parolini emas!). Token uzun bo'lgani uchun har push'da qayta yozish noqulay β buni credential helper hal qiladi.
Credential helper β tokenni eslab qolish¶
Har safar uzun tokenni qo'lda yozmaslik uchun Git credential helper (kirish ma'lumotlarini saqlovchi yordamchi) ishlatadi. U birinchi marta kiritilgan tokenni eslab qoladi va keyingi push'larda o'zi qo'yadi.
Qaysi helper yoqilganini ko'rish:
Windowsda Git odatda Git Credential Manager bilan birga o'rnatiladi va natija quyidagicha chiqadi:
β
manager chiqsa β hammasi tayyor. Windowsda birinchi push'da kichik oyna ochiladi, brauzer orqali GitHubga bir marta kirasiz, keyin token Windows Credential Manager'da xavfsiz saqlanadi va qaytib so'ralmaydi.
Agar hech narsa chiqmasa (helper yo'q), uni yoqing:
# Windows (eng yaxshi tanlov):
git config --global credential.helper manager
# macOS:
git config --global credential.helper osxkeychain
π β git config --global credential.helper store ni ishlatmang: bu tokenni oddiy matn ko'rinishida ~/.git-credentials fayliga, shifrsiz saqlaydi. Kompyuteringizdan boshqa biror dastur uni o'qiy oladi. β
Windowsda manager, macOS'da osxkeychain β bularning hammasi tokenni tizimning shifrlangan saqlash joyiga qo'yadi.
HTTPS va SSH orasida almashish¶
Loyihangiz qaysi manzil bilan ulanganini ko'rasiz:
Bu HTTPS bilan ulangan. SSHga o'tkazish uchun manzilni almashtiramiz:
Tekshiramiz β endi SSH:
Orqaga, SSHdan HTTPSga qaytish ham xuddi shunday:
π‘ Ikki manzil shaklini yodda saqlang β set-url da to'g'ri ko'chirish uchun:
| Tur | Manzil shakli |
|---|---|
| HTTPS | https://github.com/<egasi>/<repo>.git |
| SSH | git@github.com:<egasi>/<repo>.git |
Asosiy farq: HTTPSda https://... va /, SSHda git@...: va :. Repozitoriyning o'zi va tarixi o'zgarmaydi β faqat unga qanday ulanish o'zgaradi.
Ikki bosqichli himoya (2FA)¶
GitHub 2023-yildan beri ko'p akkauntlar uchun 2FA (two-factor authentication β ikki bosqichli tasdiqlash) ni majburiy qildi. Bu β paroldan tashqari, telefoningizdagi ilovadan keladigan bir martalik kod.
2FA yoqilgan bo'lsa:
- Saytga (github.com) kirishda parol + telefon kodi so'raladi.
- Push uchun esa baribir token yoki SSH kalit kerak β 2FA buni almashtirmaydi, balki kuchaytiradi.
π 2FA yoqishni keyinga qoldirmang: Settings -> Password and authentication -> Two-factor authentication. Telefoningizga authenticator ilova (masalan, telefon ichidagi tasdiqlovchi) o'rnatasiz va GitHub bergan QR kodni skanerlaysiz. Tiklash kodlarini (recovery codes) ham saqlab qo'ying β telefonni yo'qotsangiz, akkauntga qaytishning yagona yo'li shu.
Eng muhim qoida: sirni hech qachon commit qilmang¶
Bu β butun bob ichidagi eng jiddiy ogohlantirish. Token, parol, SSH maxfiy kaliti, API kaliti, ma'lumotlar bazasi paroli β bularning birortasi ham repozitoriyga tushmasligi kerak.
β Nima uchun xavfli: agar tokenni kodga yozib commit qilsangiz va push qilsangiz, u butun git tarixiga muhrlanadi. Keyin faylni o'chirib, yangi commit qilsangiz ham β token eski commit ichida qoladi va public repozitoriyda hammaga ochiq bo'ladi. Botlar GitHubni doim skanerlab, ochiq qolgan tokenlarni soniyalar ichida topadi va suiiste'mol qiladi.
β
To'g'ri yo'l β sirlarni alohida faylga chiqarib, uni .gitignore orqali kuzatuvdan chiqarish:
.env faylida sirlaringiz turadi, lekin .gitignore tufayli u hech qachon commit'ga tushmaydi (.gitignore haqida 4-bobda batafsil bor).
π Agar adashib token yoki parolni push qilib yuborsangiz: 1) o'sha tokenni darhol GitHubdan bekor qiling (Settings -> token sahifasidan Revoke), 2) yangisini yarating. Faylni o'chirishning o'zi yetarli emas β token tarixda qolgani uchun uni amalsiz qilish shart. Tarixning o'zini tozalash (16-bob mavzusi) β bu ikkinchi qadam, lekin token allaqachon "ochilgan" deb hisoblang.
π‘ Boblararo bog'liqlik: SSH/token bilan endi push qila olasiz (11-bob). Keyingi 13-bobda jamoa bo'lib ishlash β Pull Request va code review β boshlanadi, u yerda bu autentifikatsiya kundalik ishingizning poydevori bo'ladi.
12-bob mashqlari¶
Mashqlar haqiqiy GitHub akkauntingizda bajariladi. Eski parolingizni hech qaerda kiritmang β faqat token va SSH kalit ishlatiladi.
- Terminalda
ls -al ~/.sshbuyrug'ini ishlatib, kompyuteringizda allaqachon SSH kalit (id_ed25519yokiid_rsa) bor-yo'qligini aniqlang. ssh-keygen -t ed25519 -C "<emailingiz>"bilan yangi SSH kalit jufti yarating; passphrase'ni bo'sh qoldiring.- Yangi yaratilgan ikki faylni (
id_ed25519vaid_ed25519.pub)ls ~/.sshbilan ko'ring va qaysi biri maxfiy, qaysi biri ochiq ekanini ayting. cat ~/.ssh/id_ed25519.pubbilan ochiq kalit matnini ekranga chiqaring va ussh-ed25519so'zidan boshlanganini tekshiring.- Ochiq kalitni
clip < ~/.ssh/id_ed25519.pub(Windows) yordamida clipboardga nusxalang. - GitHubda Settings -> SSH and GPG keys -> New SSH key orqali ochiq kalitni
Uy kompyuterinomi bilan qo'shing. ssh -T git@github.comishlatib, "Hi<username>! You've successfully authenticated" xabarini oling; birinchi savolgayesjavob bering.- Atayin xato qilib ko'ring: GitHubdan SSH kalitni vaqtincha o'chiring,
ssh -T git@github.comni qayta ishlating vaPermission denied (publickey)xabarini kuzating, so'ng kalitni qaytadan qo'shing. - GitHubda yangi bo'sh repozitoriy (
ssh-sinov) oching va unigit clone git@github.com:<username>/ssh-sinov.gitbilan SSH manzili orqali clone qiling. - Shu loyihaga bitta fayl qo'shib commit qiling va
git pushni parol so'ralmasdan ishlashini tasdiqlang. - Settings -> Developer settings -> Personal access tokens -> Fine-grained tokens orqali yangi token yarating; muddatini 30 kun qo'ying.
- Tokenga faqat bitta repozitoriyga Contents: Read and write huquqini bering va yaratilgan token matnini xavfsiz joyga saqlang.
- Yangi papkada loyihani HTTPS orqali clone qiling:
git clone https://github.com/<username>/ssh-sinov.git. - Shu HTTPS nusxasiga o'zgarish kiritib push qiling; parol so'ralganda akkaunt paroli o'rniga tokenni qo'ying.
git config --global credential.helperishlatib, kompyuteringizda qaysi credential helper yoqilganini aniqlang.git remote -vbilan loyihangiz HTTPS yoki SSH bilan ulanganini ko'ring.git remote set-url origin git@github.com:<username>/ssh-sinov.gitbilan HTTPS loyihani SSHga o'tkazing vagit remote -vbilan o'zgarishni tasdiqlang.- Endi
git remote set-url origin https://github.com/<username>/ssh-sinov.gitbilan orqaga HTTPSga qaytaring. - Loyihaga
.gitignorefayli qo'shib, ichiga.envva*.keyqatorlarini yozing, so'nggit statusbilan.envfaylining kuzatuvga tushmasligini tekshiring (sinov uchun bo'sh.envyarating). - GitHub Settings -> Password and authentication bo'limiga kirib, akkauntingizda 2FA holatini tekshiring; yoqilmagan bo'lsa, authenticator ilova bilan 2FA ni yoqing va tiklash kodlarini saqlang.