Ücretsiz3 dakikalık yazılım sağlık testi: önce neyi düzeltmeniz gerektiğini görün
Blog

SSH Permission denied (publickey) Çözümü

2 dk okuma
  • SSH
  • OpenSSH
  • Linux
İçindekiler

4-5 aydır girmediğim bir sunucuya bağlanmak istediğimde şu hatayı aldım:

username@server: Permission denied (publickey).

Muhtemelen arada yapılan bir OpenSSH güncellemesinden sonra ortaya çıkmıştı. Sunucu yalnızca anahtarla girişe izin veriyordu ve anahtarım reddediliyordu.

1. Önce teşhis: neden reddediliyor?

Ayarlara dokunmadan önce bağlantıyı ayrıntılı modda deneyin. Hangi anahtarların denendiğini ve nerede reddedildiğini gösterir:

ssh -v username@server

En sık rastlanan sebepler:

  • Sunucudaki ~/.ssh klasörünün ya da authorized_keys dosyasının izinleri fazla açık. OpenSSH bu durumda anahtarı sessizce yok sayar.
  • Açık anahtarınız sunucudaki authorized_keys dosyasında yok ya da yanlış kullanıcıya eklenmiş.
  • OpenSSH güncellemesiyle eski anahtar türleri (örneğin SHA-1 imzalı ssh-rsa) varsayılan olarak kapatılmış.

2. Sunucuya erişim

SSH ile bağlanamadığınız için sunucuya fiziksel olarak ya da sağlayıcınızın web konsolundan erişip yetkili bir kullanıcıyla giriş yapmanız gerekiyor.

Önce izinleri düzeltin; çoğu zaman sorun burada biter:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

3. Gerekirse geçici olarak parola girişi

Anahtarınızı sunucuya ekleyebilmek için kısa süreliğine parola girişini açmanız gerekebilir. Bu kalıcı bir çözüm değil: parola girişi açık kalan sunucu, otomatik parola deneme saldırılarının hedefi olur.

sudo nano /etc/ssh/sshd_config

nano’da Ctrl+W ile PasswordAuthentication satırını bulun ve geçici olarak açın:

PasswordAuthentication yes

Yapılandırmayı uygulamadan önce mutlaka doğrulayın. Hatalı bir ayar, SSH servisinin hiç açılmamasına ve sunucunun dışında kalmanıza yol açabilir:

sudo sshd -t
sudo systemctl reload ssh

Debian ve Ubuntu’da servisin adı ssh, RHEL ve türevlerinde sshd’dir. Benim ilk denememde service sshd reload bu yüzden hata vermişti.

4. Kalıcı çözüm: anahtarı ekleyip parolayı kapatmak

Anahtar kendi bilgisayarınızda üretilir, sunucuda değil. Modern ve güvenli bir anahtar oluşturup sunucuya ekleyin:

ssh-keygen -t ed25519
ssh-copy-id username@server

Anahtarla girişin çalıştığını yeni bir terminalde doğruladıktan sonra parola girişini yeniden kapatın:

PasswordAuthentication no
sudo sshd -t
sudo systemctl reload ssh

Mevcut oturumu, yeni bir terminalde anahtarla giriş yapabildiğinizi görene kadar kapatmayın. Bir şeyler ters giderse geri dönebileceğiniz tek kapı odur.

Güncelleme notu

Bu yazının ilk hali 2018’de Medium’da yayımlandı. O sürümde parola girişini kalıcı olarak açmayı öneriyordum; bugün bunu yapmıyorum. Burada teşhis adımlarını ve parolanın yeniden kapatılmasını ekleyerek güncelledim.

Yeni yazılar e-postanıza gelsin

Yeni bir yazı yayımladığımda kısa bir e-posta alırsınız. İstediğiniz zaman tek tıkla çıkabilirsiniz. Gizlilik

İlgili yazılar