SSH Permission Denied (publickey) Hatası Nasıl Çözülür?
SSH anahtar kimlik doğrulaması başarısız olduğunda bu hata oluşur. authorized_keys ve dosya izinleri kontrol edilmelidir.
SSH Permission Denied Hatası Nedir?
SSH Permission denied (publickey) hatası, SSH istemcisinin sunucuya anahtar tabanlı kimlik doğrulama (public key authentication) ile bağlanmaya çalışırken başarısız olduğunda karşılaşılan bir erişim reddi hatasıdır. Bu hata, SSH şifre ile girişin devre dışı bırakıldığı veya yalnızca anahtar tabanlı girişin etkinleştirildiği sunucularda sıkça görülür.
SSH anahtar tabanlı kimlik doğrulaması şöyle çalışır: İstemcideki özel anahtar (private key) ile sunucudaki ortak anahtar (public key) eşleştiğinde oturum açılır. Eğer sunucuda kayıtlı ortak anahtar yoksa, yanlış anahtarla bağlanmaya çalışıyorsanız veya dosya izinleri yanlışsa bu hata oluşur.
Hata mesajı şu şekillerde görünebilir:
Permission denied (publickey).
# veya
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
# veya
debug1: No more authentication methods to try.
Permission denied (publickey).
Bu sorun özellikle yeni sunucu kurulumlarında, SSH anahtarı değiştirdikten sonra veya sunucuya başka bir kullanıcı hesabıyla bağlanmaya çalışırken ortaya çıkar.
Olası Nedenler
~/.ssh/authorized_keysdosyası eksik veya yanlış konumda~/.ssh/dizin izni 700 değil (örn. 755 veya 777 olmuş)authorized_keysdosya izni 600 değil (örn. 644 olmuş)- Yanlış kullanıcı adıyla bağlanmaya çalışılıyor (örn. root yerine ubuntu)
- Yanlış private key dosyası kullanılıyor
sshd_config'dePubkeyAuthentication noayarlanmış- SELinux veya AppArmor SSH dizin erişimini engelliyor
- Sahip (owner) yanlış; authorized_keys root'a ait ama kullanıcı farklı
- SSH config dosyasında yanlış IdentityFile belirtilmiş
Çözüm Adımları
1. SSH Debug Modu ile Sorunu Tespit Etme
İlk adım olarak, bağlantı girişimini verbose modda çalıştırarak tam hata mesajını görün:
ssh -vvv kullanici@sunucu_ip
Çıktıda şunlara bakın:
debug1: Offering public key: /home/user/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Eğer anahtar "offered" ama reddedildiyse sorun sunucu tarafındadır (authorized_keys veya izinler). Eğer hiç anahtar önerilmediyse istemci tarafında anahtar yapılandırması yoktur.
2. authorized_keys Dosyasını Oluşturma ve Düzenleme
Sunucuda ilgili kullanıcı olarak şu adımları izleyin:
# .ssh dizini oluştur (yoksa)
mkdir -p ~/.ssh
# authorized_keys dosyasını oluştur/düzenle
nano ~/.ssh/authorized_keys
# Yerel makinenizdeki public key içeriğini buraya yapıştırın
# Örnek (tek satır olmalı):
# ssh-rsa AAAAB3NzaC1yc2EAAA... kullanici@bilgisayar
Public key'inizi yerel makinenizden şu komutla öğrenebilirsiniz:
cat ~/.ssh/id_rsa.pub
# veya Ed25519 anahtar için:
cat ~/.ssh/id_ed25519.pub
3. Dosya İzinlerini Düzeltme
SSH kimlik doğrulaması için izinler çok kritiktir. Sunucuda şunu çalıştırın:
# .ssh dizini için: sadece sahip okuyup yazabilmeli
chmod 700 ~/.ssh
# authorized_keys için: sadece sahip okuyup yazabilmeli
chmod 600 ~/.ssh/authorized_keys
# İzinleri kontrol edin
ls -la ~/.ssh/
Sahipliği de kontrol edin:
ls -la ~/.ssh/authorized_keys
# Çıktı şöyle olmalı: -rw------- 1 kullanici kullanici ...
Sahiplik yanlışsa düzeltin:
chown kullanici:kullanici ~/.ssh/authorized_keys
chown kullanici:kullanici ~/.ssh/
4. sshd_config Yapılandırmasını Kontrol Etme
Sunucuda SSH daemon yapılandırmasını kontrol edin:
sudo nano /etc/ssh/sshd_config
Şu direktiflerin doğru ayarlandığından emin olun:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# Root girişine izin veriyorsanız:
PermitRootLogin yes
# veya sadece anahtar ile root girişi:
# PermitRootLogin prohibit-password
Değişiklikten sonra SSH'ı yeniden başlatın:
sudo systemctl restart sshd
5. Yeni SSH Anahtar Çifti Oluşturma
Mevcut anahtarınız çalışmıyorsa yeni bir anahtar çifti oluşturun:
# Yerel makinenizde:
# ED25519 (önerilir, daha güvenli):
ssh-keygen -t ed25519 -C "email@example.com"
# veya RSA 4096:
ssh-keygen -t rsa -b 4096 -C "email@example.com"
Public key'i sunucuya kopyalamak için:
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu_ip
# veya manuel olarak:
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
6. İstemci SSH Config Dosyası
Yerel makinenizde ~/.ssh/config dosyası oluşturarak hangi anahtarın kullanılacağını belirtin:
Host sunucu
HostName 1.2.3.4
User kullanici
IdentityFile ~/.ssh/id_ed25519
Port 22
Özet ve Önleyici Tedbirler
~/.ssh/dizin izni her zaman 700,authorized_keysizni 600 olmalıdır- SSH bağlantılarını her zaman
-vile test ederek sorunları hızlıca tespit edin - Mümkünse şifre kimlik doğrulamasını tamamen kapatın (
PasswordAuthentication no) - ED25519 anahtarları RSA'ya kıyasla daha güvenli ve daha hızlıdır, tercih edin
- Sunucuya ilk bağlanmadan önce bir kopyayı güvenli yerde saklayın
- Fail2ban ile brute force saldırılarına karşı SSH'ı koruyun
İlgili Makaleler
- SSH Güvenliği: Anahtar Tabanlı Giriş, Port Değiştirme ve Bastion
- Linux Firewall: firewalld ve UFW ile HTTP, HTTPS ve SSH Kuralları
- UFW Firewall Nasıl Kurulur? Ubuntu ve Debian Güvenlik Duvarı Rehberi
- Ubuntu Server 22.04 LTS Kurulumu ve Güvenli Yapılandırma Rehberi
- AlmaLinux 9 Kurulumu ve İlk Yapılandırma Rehberi
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!