GitHub CLI'da Süreli OAuth Jetonları: gh auth login --expiring, Otomatik Yenileme ve Betiklerde Dikkat Edilecekler

Alesta WEB

GitHub CLI'da Süreli OAuth Jetonları: gh auth login --expiring, Otomatik Yenileme ve Betiklerde Dikkat Edilecekler

Kısa cevap: GitHub, 21 Ekim 2026'da GitHub CLI (gh) için süresi dolan ve kendiliğinden yenilenen OAuth jetonlarını herkese açık önizlemeye aldı. gh auth login --expiring ile giriş yapıldığında gh, kısa ömürlü bir erişim jetonunu dönen (rotating) bir yenileme jetonuyla birlikte saklıyor ve gerektiğinde kendisi yeniliyor. Sızan bir erişim jetonu birkaç saat içinde işe yaramaz hale geliyor. Özellik gh 2.103.0 ve üstünü istiyor; github.com ve ghe.com'da hemen, GitHub Enterprise Server'da 3.23 ile çalışıyor. GitHub ileride yeni girişlerde bunu varsayılan yapmayı planlıyor.

Masada terminal açık dizüstü bilgisayar (Laptop with a terminal open)
Geliştirici makinesindeki uzun ömürlü jetonlar, zararlı paketlerin ilk aradığı şeylerden biri. Fotoğraf: Daniil Komov / Unsplash

Neden süreli jeton? (Why expiring tokens)

Bugüne kadar gh auth login ile alınan OAuth jetonunun süresi dolmuyordu. Jeton, kullanıcı oturumu kapatana ya da jetonu elle iptal edene kadar geçerli kalıyordu. Bu da geliştirici makinesinden çalınan bir jetonun aylarca kullanılabilmesi demekti. Son iki yılın tedarik zinciri saldırılarında, örneğin npm Shai-Hulud solucanında, zararlı kodun ilk aradığı şeylerden biri geliştiricinin diskindeki GitHub jetonlarıydı.

Yeni modelde iki jeton var: kısa ömürlü bir erişim jetonu ve her kullanımda değişen bir yenileme jetonu. gh, erişim jetonunun süresi dolduğunda yenileme jetonuyla sessizce yenisini alıyor. Kullanıcı hiçbir şey fark etmiyor; ama bir yere kopyalanmış ya da çalınmış erişim jetonu GitHub'ın ifadesiyle "saatler içinde" geçersiz oluyor. GitHub duyuruda kesin süreleri paylaşmadı.

Nasıl açılır? (How to opt in)

Önce gh sürümünü kontrol edin; 2.103.0 ya da üstü gerekiyor:

Metin
gh --version

Tek bir giriş için bayrakla:

Metin
gh auth login --expiring

Bundan sonraki tüm girişlerde varsayılan olsun isterseniz:

Metin
gh config set expiring_credentials enabled

Durumu görmek için gh auth status çalıştırın. Çıktıda jetonun süreli olup olmadığı ve geçerli erişim jetonunun ne zaman dolacağı görünüyor. Özellik tamamen isteğe bağlı: bayrak ya da ayar kullanılmazsa hiçbir şey değişmiyor, mevcut oturumlar ve elle verilen jetonlar eskisi gibi çalışıyor. Sunucu yenilenebilir jeton desteklemiyorsa gh normal, süresiz jetona geri düşüyor.

Git ile birlikte kullanım (Git over HTTPS)

Depoları HTTPS üzerinden çekip gönderiyorsanız GitHub şu komutu güçlü biçimde öneriyor:

Metin
gh auth setup-git

Bu komut gh'yi Git'in kimlik bilgisi yardımcısı (credential helper) yapıyor; böylece Git her ihtiyaç duyduğunda güncel jetonu gh'den alıyor. Ayrıca Git 2.46 veya üstü öneriliyor: bu sürümlerde gh, jetonun süreli olduğunu Git'e bildirebiliyor ve Git süresi geçmiş bir jetonu önbelleğinde tutmuyor. Daha eski Git'te özellik yine çalışıyor ama gh bir kereye mahsus yükseltme önerisi gösteriyor. Sürümü kontrol etmek için:

Bash
git --version

Betikler ve CI için dikkat (Scripts and automation)

Süreli jetonun bir bedeli var: jetonu bir kez alıp saklayan her şey bir süre sonra bozuluyor. GitHub'ın uyardığı durumlar:

  • Jetonu bir kez okuyup saklayan betikler: TOKEN=$(gh auth token) satırını başta bir kez çalıştırıp saatlerce kullanan betik, jeton dolunca 401 alır. Çözüm, jetona her ihtiyaç duyulduğunda gh auth token'ı yeniden çağırmak.
  • Jetonu başka araca kopyalamak: bir IDE eklentisine, Docker kayıt deposu girişine ya da .npmrc'ye yapıştırılan jeton da aynı şekilde dolacak.
  • Uzun süren iş akışları: GitHub, uzun süre geçerli jeton isteyen iş akışlarında şimdilik bu özelliği açmamayı öneriyor.

CI ortamları zaten bu değişiklikten etkilenmiyor: GitHub Actions kendi kısa ömürlü GITHUB_TOKEN'ını kullanıyor, sunucularda ise ince taneli kişisel erişim jetonu (fine-grained PAT) ya da GitHub App jetonu daha uygun. Değişiklik asıl olarak geliştirici makinelerindeki uzun ömürlü jetonları hedefliyor.

Alesta WEB olarak ekip makinelerinde bu tür kimlik bilgilerinin süreli olmasını tercih ediyoruz; bir dizüstü bilgisayar kaybolduğunda ya da zararlı bir paket kurulduğunda hasarın süresi kısalıyor. Yerel geliştirmede gh kullanıyorsanız açmak için iyi bir zaman; Actions kilit dosyası ve package firewall ile birlikte GitHub'ın bu ayki tedarik zinciri adımlarının üçüncüsü bu.

GitHub Enterprise Server (GHES)

Özellik github.com ve veri yerleşimli ghe.com'da hemen kullanılabiliyor. GitHub Enterprise Server süreli jetonları 3.23 sürümüyle vermeye başlıyor. Daha eski GHES sürümlerinde --expiring ile giriş yapılırsa gh sessizce süresiz jetona geri dönüyor; yani bayrağı açmak bir şeyi bozmuyor ama koruma da sağlamıyor. Kurum içi sunucuda gh auth status çıktısıyla jetonun gerçekten süreli olup olmadığını doğrulayın.

Sık sorulan sorular

Mevcut gh oturumum etkilenir mi?

Hayır. Siz açıkça --expiring ile giriş yapmadıkça ya da ayarı açmadıkça mevcut oturumunuz eskisi gibi çalışır.

Jetonum ne kadar sürede doluyor?

GitHub kesin süre vermedi; duyuruda erişim jetonunun kısa ömürlü olduğu ve sızan bir jetonun saatler içinde kullanılamaz hale geldiği belirtiliyor. Geçerli bitiş zamanını gh auth status gösteriyor.

Yenileme jetonu çalınırsa ne olur?

Yenileme jetonu her kullanımda değişiyor. Şüpheli bir durumda gh auth logout ile çıkış yapıp GitHub hesap ayarlarındaki yetkili OAuth uygulamaları listesinden GitHub CLI erişimini iptal etmek en güvenli yol.

Gelecekte varsayılan olacak mı?

Evet. GitHub, ileriki bir sürümde süreli jetonları yeni girişler için varsayılan yapmayı planladığını açıkladı. Jetonu saklayan betiklerinizi şimdiden düzeltmek iyi olur.

İlgili yazılar: GitHub package firewall · GitHub Actions kilit dosyası · Copilot CLI yerel model · Web yazılım hizmetleri

Kapak fotoğrafı: Gabriel Heinzer / Unsplash

Yorumlar

Yorum yazın

Hazır mısınız?

Projenizi birlikte planlayalım

Haber sitesi, adisyon, QR menü ya da kurumsal web sitesi — ihtiyacınızı dinleyelim, demo hesabı açalım ve yazılı teklifimizi iletelim. Görüşme ücretsizdir.

WhatsAppAra