GitHub Permission Denied Publickey Hatası Nasıl Çözülür?
GitHub üzerinde git clone, git pull veya git push yaparken Permission denied (publickey) hatası alıyorsanız GitHub SSH üzerinden bilgisayarınızı veya sunucunuzu doğrulayamıyor demektir.
En sık nedenler SSH anahtarının bulunmaması, anahtarın GitHub hesabına eklenmemesi, yanlış hesabın kullanılması veya SSH'nin doğru anahtarı seçmemesidir.
1. Repository'nin SSH kullandığını kontrol edin
Öncelikle:
git remote -vkomutunu çalıştırın.
Şuna benzer bir adres görüyorsanız SSH kullanıyorsunuz:
git@github.com:kullanici/proje.gitAdres:
https://github.com/kullanici/proje.gitşeklindeyse HTTPS kullanıyorsunuz ve
publickey problemi normal Git remote bağlantınızdan farklı bir SSH işlemine ait olabilir.2. Mevcut SSH anahtarlarını kontrol edin
Linux ve macOS üzerinde:
ls -la ~/.sshWindows PowerShell üzerinde de kullanıcı profilinizdeki
.ssh klasörünü kontrol edebilirsiniz.Örneğin şu dosyalar bulunabilir:
id_ed25519id_ed25519.pubBurada
.pub uzantılı dosya public key, uzantısız dosya ise private key'dir.Private key dosyanızı hiç kimseyle paylaşmayın ve GitHub'a yüklemeyin.
3. SSH anahtarınız yoksa oluşturun
Yeni sistemlerde uygun olduğunda Ed25519 anahtarı oluşturmak için:
ssh-keygen -t ed25519 -C "mail@example.com"komutunu kullanabilirsiniz.
Komut size anahtarın kaydedileceği konumu ve isteğe bağlı parola belirleme seçeneklerini sorabilir.
Varsayılan konumu kullanacaksanız genellikle Enter ile devam edebilirsiniz.
4. Public key'i GitHub hesabınıza ekleyin
Oluşturduğunuz
.pub dosyasının içeriğini kopyalayın.Örneğin:
~/.ssh/id_ed25519.pubBu dosyanın içeriğini GitHub hesabınızdaki SSH key ayarlarına ekleyin.
Burada önemli nokta
.pub dosyasının kullanılmasıdır.Private key olan:
id_ed25519dosyasını kesinlikle paylaşmayın.
5. SSH bağlantısını test edin
Anahtar GitHub hesabına eklendikten sonra:
ssh -T git@github.comkomutunu çalıştırın.
İlk bağlantıda GitHub sunucusunun kimliğini doğrulamanız istenebilir. Gösterilen fingerprint'i GitHub'ın resmi olarak yayınladığı fingerprint bilgileriyle doğrulamadan kabul etmeyin.
Kimlik doğrulama başarılı olduğunda GitHub hesabınızın tanındığını belirten bir mesaj görmeniz beklenir.
6. SSH Agent anahtarı kullanmıyor olabilir
Anahtar bilgisayarınızda bulunmasına rağmen SSH tarafından kullanılmıyorsa SSH agent kontrol edilebilir.
Linux veya macOS ortamında uygun yapılandırmada:
ssh-add ~/.ssh/id_ed25519ile anahtar agent'a eklenebilir.
Öncesinde SSH agent'ın çalışıyor olması gerekir.
İşletim sistemine göre agent başlatma ve yönetim yöntemi değişebilir.
7. SSH hangi anahtarı kullanıyor kontrol edin
Bilgisayarda birden fazla SSH anahtarı varsa GitHub bağlantısında yanlış anahtar deneniyor olabilir.
Daha ayrıntılı bağlantı çıktısı için:
ssh -vT git@github.comkomutu kullanılabilir.
Bu çıktı SSH'nin hangi anahtarları bulduğunu ve hangilerini denediğini anlamaya yardımcı olur.
Çıktıda özel bilgiler bulunabileceğinden forumda paylaşmadan önce hassas bilgileri kontrol edin.
8. Birden fazla GitHub hesabı kullanıyorsanız
Aynı bilgisayarda kişisel ve iş hesabı gibi birden fazla GitHub hesabı kullanıyorsanız farklı SSH anahtarlarını ayırmanız gerekebilir.
Bu tür durumlarda
~/.ssh/config dosyası üzerinden farklı host tanımları yapılabilir.Örneğin her hesap için farklı anahtar belirlenebilir.
Ancak yapılandırmayı yaparken repository remote adresinin de tanımladığınız host ile uyumlu olması gerekir.
9. Anahtar doğru hesapta mı kontrol edin
SSH anahtarınız GitHub'a eklenmiş olsa bile repository başka bir GitHub hesabına ait olabilir.
Örneğin SSH sizi
hesapA olarak doğrularken repository yalnızca hesapB için yazma yetkisine sahipse push işlemi yine başarısız olabilir.Önce:
ssh -T git@github.comile hangi hesabın tanındığını kontrol edin.
Ardından bu hesabın ilgili repository üzerinde gerekli yetkiye sahip olduğundan emin olun.
10. Sunucudan GitHub'a bağlanıyorsanız
VPS veya başka bir Linux sunucusundan private repository çekiyorsanız SSH anahtarının kendi bilgisayarınızda değil, GitHub bağlantısını gerçekleştiren ortamda kullanılabilir olması gerekir.
Örneğin komutu VPS üzerinde çalıştırıyorsanız SSH yapılandırmasını VPS tarafında kontrol etmeniz gerekir.
Private key'i güvenli olmayan yöntemlerle cihazlar arasında taşımayın.
Repository ve kullanım senaryosuna göre uygun erişim yöntemini seçin.
11. Dosya izinlerini kontrol edin
Linux ve benzeri sistemlerde SSH özel anahtarlarının izinleri gereğinden fazla açık olduğunda SSH güvenlik nedeniyle anahtarı kullanmayı reddedebilir.
Hata mesajında izinlerle ilgili bir uyarı varsa
.ssh klasörü ve private key dosyasının sahiplik ve izinlerini kontrol edin.İzinleri rastgele değiştirmek yerine SSH'nin hata mesajında belirttiği problemi çözün.
12. Remote adresini yanlış yazmış olabilirsiniz
Kontrol edin:
git remote -vGerekirse doğru SSH adresini ayarlayın:
git remote set-url origin git@github.com:kullanici/proje.gitArdından tekrar:
git remote -vile kontrol edin.
13. SSH yerine HTTPS kullanılabilir mi?
Evet. SSH kullanmak zorunlu değildir.
Repository remote adresini uygun HTTPS adresine değiştirerek GitHub'ın desteklediği HTTPS kimlik doğrulama yöntemlerinden yararlanabilirsiniz.
Ancak yalnızca hata mesajından kaçmak için bağlantı yöntemini değiştirmek yerine mevcut SSH probleminin nedenini anlamak uzun vadede daha faydalı olabilir.
Hızlı kontrol sırası
Permission denied (publickey) hatasında şu sırayla ilerleyin:1.
git remote -v2.
ls -la ~/.ssh3. SSH anahtarınız yoksa oluşturun.
4. Public key'i doğru GitHub hesabına ekleyin.
5.
ssh -T git@github.com ile bağlantıyı test edin.6. Gerekirse SSH agent'ı kontrol edin.
7. Birden fazla anahtar varsa
ssh -vT git@github.com ile kullanılan anahtarı inceleyin.8. GitHub hesabınızın repository üzerinde gerekli yetkiye sahip olduğunu doğrulayın.
9. Tekrar
git push veya git pull deneyin.Özellikle private SSH anahtarınızı, erişim tokenınızı veya başka gizli kimlik bilgilerinizi forum mesajına eklemeyin.
Yardım isterken işletim sisteminizi,
git remote -v çıktısını hassas bilgileri gizleyerek, ssh -T git@github.com sonucunu ve aldığınız hata mesajını paylaşmanız sorunun daha hızlı teşhis edilmesini sağlar.