GitHub token ve Git kimlik doğrulama: personal access token, Git Credential Manager, parolasız push
13 Ağustos 2021'den beri GitHub, HTTPS üzerinden yapılan Git işlemlerinde hesap parolasını kabul etmez: bunun yerine GitHub token'ı (personal access token) veya tarayıcıda oturum açan ve kimlik bilgilerini kendisi saklayan Git Credential Manager kullanılır. Token, github.com üzerinde Settings → Developer settings bölümünden oluşturulur, git push veya git clone sırasında parola yerine girilir ve credential.helper tarafından saklanır.
Git neden artık GitHub parolasını kabul etmiyor
Komut git push olduğunda github.com kullanıcı adı ve parolanızı giriyor, ama reddediliyorsanız sorun bir yazım hatası değildir. 13 Ağustos 2021'den itibaren GitHub, HTTPS üzerinden yapılan Git işlemleri için parolayla girişi kapattı. Parola yerine GitHub token'ı (personal access token, PAT) ya da Git Credential Manager'ın yönettiği tarayıcı tabanlı kimlik doğrulama kullanılmalıdır.
Hata mesajı şöyle görünür:
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/'
Sebep basittir: hesap parolası her şeye tam erişim verir, tek bir repository ile sınırlandırılamaz ve iptal etmesi zordur. Token ise bir göreve özel oluşturulur, son kullanma tarihi ve yetki kümesi vardır; sızarsa bir dakika içinde parolayı değiştirmeden silinebilir. GitLab ve Bitbucket de aynı yolu izledi; aşağıda anlatılanlar onlar için de büyük ölçüde geçerlidir.
Yetkilendirmenin iki yolu: HTTPS ve SSH
Git, uzak repository ile iki protokolden biriyle konuşur ve giriş yönteminiz buna göre değişir.
| Protokol | Repository adresi | Kimlik doğrulama |
|---|---|---|
| HTTPS | https://github.com/user/project.git | Token veya Git Credential Manager (tarayıcıyla giriş) |
| SSH | git@github.com:user/project.git | SSH anahtar çifti: özel anahtar sizde, genel anahtar GitHub ayarlarında |
SSH anahtarı bir kez ayarlanır; bundan sonra Git ne kullanıcı adı ne de parola sorar. Oluşturma ve GitHub'a ekleme adımları Git yapılandırma yazısında ayrıntılı anlatılmıştır; burada HTTPS üzerinde duruyoruz, çünkü yeni başlayanların parola isteğiyle en çok karşılaştığı yer burasıdır. Repository'nizin hangi protokolü kullandığını şu komutla öğrenebilirsiniz:
git remote -v
origin https://github.com/user/project.git (fetch)
origin https://github.com/user/project.git (push)
GitHub token nasıl oluşturulur (personal access token)
Personal access token, GitHub'ın programatik erişim için parola yerine verdiği uzun ve rastgele bir dizedir. Classic token'lar ghp_ ile, fine-grained token'lar github_pat_ ile başlar. Token yalnızca oluşturulduktan hemen sonra bir kez gösterilir; bu yüzden hemen bir parola yöneticisine kopyalayın.
Adım adım
- github.com'a girin, sağ üstteki avatara tıklayın ve Settings'i açın.
- Sol menünün altında Developer settings, ardından Personal access tokens seçeneğini seçin.
- Türü seçin: Fine-grained tokens (önerilir) veya Tokens (classic), ve yeni token oluşturma düğmesine basın.
- Anlaşılır bir ad verin (örneğin «dizüstü, iş»), son kullanma süresini ve izinleri belirleyin.
- Oluştur düğmesine basın ve token'ı hemen kopyalayın.
Fine-grained mi classic mi
Fine-grained token belirli repository'lerle ve tek tek izinlerle sınırlıdır. Günlük kod çalışması için ilgili repository'leri seçin ve repository izinlerinde Contents: Read and write verin: clone, pull ve push için yeterlidir. Yalnızca özel bir repository'yi okuyacaksanız Read-only yeter.
Classic token tüm repository'lerinizde birden geçerlidir. Push için repo kapsamı, .github/workflows içindeki dosyaları değiştirmek için ayrıca workflow gerekir. Classic daha basittir ama daha tehlikelidir: sızarsa hesabınızın tamamına erişim olur.
Son kullanma süresi
GitHub birkaç süre seçeneği sunar ve kendi tarihinizi de belirtmenize izin verir. Süresiz bir token oluşturulabilir, ama bu önerilmez: unutulmuş bir kalıcı token klasik bir güvenlik açığıdır. 30–90 gün iyi bir seçimdir; GitHub'ın süre dolmadan e-posta ile gönderdiği hatırlatmada yeniden oluşturun.
Token ile git push ve git clone
Token kullanmak göründüğünden daha kolaydır: Git «Password» sorar ve parola yerine token'ı yapıştırırsınız.
$ git push origin main
Username for 'https://github.com': your-login
Password for 'https://your-login@github.com': <token'ı yapıştırın>
Terminalde parola karakterleri görünmez; bu normaldir. Token'ı yapıştırın ve Enter'a basın. Windows'taki Git Bash'te yapıştırma Shift+Insert veya sağ tık ile çalışır.
Token ile git clone
Özel bir repository de aynı şekilde klonlanır: git clone kullanıcı adı ve token ister. Sorulmasın istiyorsanız (örneğin bir betikte) token'ı doğrudan adrese yazabilirsiniz:
git clone https://your-login:<TOKEN>@github.com/user/project.git
Dezavantajına dikkat edin: token'lı adres .git/config dosyasına kaydedilir ve kabuk geçmişine düşebilir. Klonladıktan sonra token'ı adresten çıkarmak daha iyidir:
git remote set-url origin https://github.com/user/project.git
CI sistemlerinde token'lar gizli ortam değişkenleriyle verilir, dosyalara yazılmaz. GitHub Actions'ta mevcut repository için yerleşik bir GITHUB_TOKEN bulunduğu için çoğu zaman ayrı bir PAT gerekmez.
GitLab: token ile git clone
GitLab'da token profil ayarlarında, Access tokens bölümünde oluşturulur; kodla çalışmak için read_repository ve write_repository kapsamları gerekir. Yöntem aynıdır: kullanıcı adı olarak GitLab girişiniz, parola yerine token.
git clone https://oauth2:<TOKEN>@gitlab.com/group/project.git
GitLab, herhangi bir kişisel token için oauth2 adını kabul eder; onun yerine kendi kullanıcı adınızı da yazabilirsiniz.
Git pull ve fetch
Herkese açık bir repository için git pull ve git clone kimlik doğrulama olmadan çalışır. Kullanıcı adı ve token yalnızca özel repository'lerde veya git push sırasında sorulur. Herkese açık bir projede pull parola istiyorsa, büyük ihtimalle adreste bir yazım hatası vardır: GitHub, var olmayan bir repository'ye de kapalı bir repository'ye verdiği yanıtı verir.
Git Credential Manager nedir
Her push'ta token girmek zahmetlidir. Bu işi credential helper üstlenir: Git'in kimlik bilgisine ihtiyaç duyduğunda çağırdığı yardımcı bir programdır. Git ona sunucunun adresini verir, o da kendi deposundan kullanıcı adını ve parolayı (ya da token'ı) döndürür.
Git Credential Manager (GCM) bu yardımcıların en kullanışlısıdır. GitHub ve Microsoft tarafından geliştirilen, çok platformlu bir programdır: ilk push'ta bir giriş penceresi veya tarayıcı açar, GitHub'da oturum açarsınız (iki faktörlü doğrulama dâhil), GCM token'ı kendisi alır ve sistemin güvenli deposuna koyar. Bu durumda token'ı elle oluşturmanız gerekmez.
GCM; GitHub, GitLab, Bitbucket ve Azure DevOps'u destekler. Git for Windows ile varsayılan olarak kurulur; kurulum sihirbazındaki credential helper seçimi budur.
Hangi credential.helper değerleri vardır
| Değer | Nerede saklar | Ne zaman kullanılır |
|---|---|---|
manager | Git Credential Manager: Windows Kimlik Bilgileri Yöneticisi, macOS Anahtarlık, Linux'ta Secret Service | İş bilgisayarları için önerilen seçenek |
osxkeychain | macOS Anahtarlık | Mac'te Git'in standart yardımcısı |
cache | Bellekte, varsayılan 15 dakika | Token'ın diske yazılmasını istemediğiniz Linux sunucular |
store | ~/.git-credentials dosyasında düz metin olarak | Yalnızca izole makinelerde: dosyaya erişimi olan herkes token'ı okuyabilir |
Windows, macOS ve Linux'ta Git kimlik doğrulamasını yapılandırma
Zaten hangi yardımcının ayarlı olduğunu görmek için:
git config --show-origin --get-all credential.helper
Windows
Git kurulumunda varsayılan ayarları bıraktıysanız GCM zaten çalışır: ilk push'ta Git Bash, PowerShell veya VS Code üzerinden GitHub giriş penceresi açılır. Yardımcı ayarlı değilse elle etkinleştirin:
git config --global credential.helper manager
macOS
Mac'te Git genellikle zaten osxkeychain kullanır: bir kez girdiğiniz token Anahtarlık'a kaydedilir. Tarayıcıyla giriş için Git Credential Manager'ı kurun (örneğin Homebrew ile: brew install --cask git-credential-manager); kendini yapılandırır.
Linux
Linux'ta GCM ayrıca kurulur (projenin sürüm sayfasından .deb paketi veya arşiv olarak), ardından yapılandırılır ve depo seçilir:
git-credential-manager configure
git config --global credential.credentialStore secretservice
Grafik arayüzü olmayan bir sunucuda geçici önbellek daha basittir:
git config --global credential.helper 'cache --timeout=3600'
GitHub için alternatif: gh auth login
GitHub CLI kuruluysa gh auth login tarayıcıdan girişi yönlendirir, gh auth setup-git ise Git'i kimlik bilgilerini gh'den alacak şekilde ayarlar. Tek komutla «Git Bash'te oturum açmanın» kolay yoludur.
Kayıtlı Git parolasını sıfırlama veya güncelleme
En sık karşılaşılan durum: token'ın süresi dolmuştur ya da hesap değiştirmişsinizdir, ama Git hâlâ eski bilgileri kullanıp Authentication failed alır. Kayıtlı girişi silmeniz gerekir: bir sonraki push'ta Git bilgileri yeniden ister.
Evrensel komut
Her yardımcıyla çalışır:
printf "protocol=https\nhost=github.com\n\n" | git credential reject
Windows'ta git reset credentials
«Denetim Masası» → «Kimlik Bilgisi Yöneticisi» → «Windows Kimlik Bilgileri» yolunu açın, git:https://github.com biçimindeki kayıtları bulup silin. Komut satırından da yapabilirsiniz:
cmdkey /list | findstr git
cmdkey /delete:git:https://github.com
GCM kullanıyorsanız hesaptan çıkış için kendi komutu da vardır: git credential-manager github logout <kullanıcı>.
macOS
«Anahtarlık Erişimi» uygulamasını açın, «İnternet parolası» türündeki github.com kaydını bulup silin. Ya da terminalden:
git credential-osxkeychain erase
host=github.com
protocol=https
Son satırdan sonra boş satırı göndermek için Enter'a bir kez daha basın.
Linux ve store
store kullanıyorsanız ~/.git-credentials dosyasından github.com satırını silin; cache kullanıyorsanız git credential-cache exit çalıştırın.
Kimlik doğrulama hataları ve çözümleri
Support for password authentication was removed
Hesap parolanızı girdiniz. Bir token oluşturup Password alanına yapıştırın ya da Git Credential Manager'ı yapılandırın. Hata, parola istenmeden tekrarlanıyorsa, depoda eski parola kayıtlıdır: yukarıda anlatıldığı gibi silin.
git push: Authentication failed
Nedenler sıklık sırasına göre: token'ın süresi dolmuştur; token iptal edilmiştir; fine-grained token'ın bu repository'ye erişimi yoktur ya da Contents izni yalnızca okuma olarak verilmiştir; depoda başka bir hesabın bilgileri kalmıştır. Developer settings'te token'ın süresini ve izinlerini kontrol edin, kayıtlı kimlik bilgilerini sıfırlayın.
remote: Permission denied (403)
Kimlik doğrulama başarılı oldu, ama hesabınızın bu repository'ye yazma hakkı yok. Sahibinin sizi Collaborators listesine eklemesi gerekir; ya da fork'unuz üzerinden çalışıp pull request gönderin.
Repository not found
Özel bir repository için GitHub, repository'nin var olup olmadığını açıklamaz; bu yüzden hatalı bir token ile «not found» yanıtı verir. Adresi git remote -v ile ve token'ın izinlerini kontrol edin.
Git clone her seferinde parola soruyor
Credential helper ayarlı değil. manager veya osxkeychain seçeneğini etkinleştirin: ilk başarılı girişten sonra Git sormayı bırakır. Alternatif olarak SSH'a geçebilirsiniz.
Token'ı güvenli saklama
- Minimum yetki verin:
repoizni olan classic token yerine, yalnızca gereken repository'lere erişen fine-grained token kullanın. - Son kullanma süresi koyun ve token'ı süresiz uzatmak yerine yenileyin.
- Token'ları commit etmeyin ve remote adreslerine yazmayın; token herkese açık bir repository'ye sızarsa GitHub onu otomatik iptal edebilir, ama yine de sızmış kabul edip kendiniz silin.
- Kalıcı depolama için
storeyerine sistemin kendi deposunu (GCM, Anahtarlık) kullanın. - Her makine veya görev için ayrı bir token kullanın: sızıntıda yalnızca o token'ı iptal edersiniz.
Sonuç
GitHub parolası 2021'den beri HTTPS üzerinden Git için çalışmıyor. Üç geçerli yol vardır: tarayıcıda Git Credential Manager ile giriş yapmak, parola yerine GitHub token'ı girmek veya SSH anahtarlarına geçmek. Token, Settings → Developer settings üzerinden oluşturulur, credential.helper tarafından saklanır ve Authentication failed hatasında çoğu zaman token'ı yenilemek ve eski kimlik bilgilerini silmek yeter. GitHub bağlantısı ve uzak repository ile çalışma Git kursunda uygulamalı olarak ele alınmaktadır.
Sık sorulan sorular
GitHub token'ını oluşturduktan sonra tekrar görebilir miyim?
Hayır, GitHub token'ı yalnızca bir kez gösterir. Kaydetmediyseniz eski token'ı silin ve yeni bir tane oluşturun.
Herkese açık bir repository'yi git clone ile almak için token gerekir mi?
Hayır, herkese açık repository'ler token olmadan klonlanır ve git pull ile güncellenir; token özel repository'ler ve git push için gerekir.
Token'ın süresi dolunca ne olur?
Git Authentication failed hatası vermeye başlar. Yeni bir token oluşturun (ya da eskisinde Regenerate düğmesini kullanın), kayıtlı kimlik bilgilerini silin ve bir sonraki push'ta yeni token'ı girin.
GitHub token'ı iki faktörlü doğrulama ile çalışır mı?
Evet; hatta 2FA açıkken token tam da bu yüzden gerekir: Git işlemlerinde parolanın ve doğrulama kodunun yerini alır. Git Credential Manager ise tarayıcıyla girişte 2FA'yı kendisi tamamlar.
Git kullanıcı adını ve parolasını nerede saklar?
Git bunları kendisi saklamaz; bunu credential helper yapar: Windows Kimlik Bilgileri Yöneticisi, macOS Anahtarlık, Linux'ta Secret Service veya helper store kullanılıyorsa ~/.git-credentials dosyası.
Bu konu “Sıfırdan Güvenilir Geliştiriciye Git” kursunda uygulamalı olarak ayrıntılı işleniyor.
- Kurulum ve Yapılandırma: Git'i İlk Çalıştırmaya Hazırlama
- GitHub ve Uzaktaki Depolar: Kodunuz Bulutta