Rehber

GitHub token ve Git kimlik doğrulama: personal access token, Git Credential Manager, parolasız push

Güncellendi: · Skillaria.Top

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.

ProtokolRepository adresiKimlik doğrulama
HTTPShttps://github.com/user/project.gitToken veya Git Credential Manager (tarayıcıyla giriş)
SSHgit@github.com:user/project.gitSSH 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

  1. github.com'a girin, sağ üstteki avatara tıklayın ve Settings'i açın.
  2. Sol menünün altında Developer settings, ardından Personal access tokens seçeneğini seçin.
  3. Türü seçin: Fine-grained tokens (önerilir) veya Tokens (classic), ve yeni token oluşturma düğmesine basın.
  4. Anlaşılır bir ad verin (örneğin «dizüstü, iş»), son kullanma süresini ve izinleri belirleyin.
  5. 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ğerNerede saklarNe zaman kullanılır
managerGit Credential Manager: Windows Kimlik Bilgileri Yöneticisi, macOS Anahtarlık, Linux'ta Secret Serviceİş bilgisayarları için önerilen seçenek
osxkeychainmacOS AnahtarlıkMac'te Git'in standart yardımcısı
cacheBellekte, varsayılan 15 dakikaToken'ın diske yazılmasını istemediğiniz Linux sunucular
store~/.git-credentials dosyasında düz metin olarakYalnı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: repo izni 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 store yerine 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 konuyu videoyla öğrenin

Bu konu “Sıfırdan Güvenilir Geliştiriciye Git” kursunda uygulamalı olarak ayrıntılı işleniyor.

Kursa git