SSH Permission denied (publickey) Çözümü
- 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@serverEn sık rastlanan sebepler:
- Sunucudaki
~/.sshklasörünün ya daauthorized_keysdosyasının izinleri fazla açık. OpenSSH bu durumda anahtarı sessizce yok sayar. - Açık anahtarınız sunucudaki
authorized_keysdosyası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_keys3. 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_confignano’da Ctrl+W ile PasswordAuthentication satırını bulun ve geçici olarak açın:
PasswordAuthentication yesYapı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 sshDebian 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@serverAnahtarla girişin çalıştığını yeni bir terminalde doğruladıktan sonra parola girişini yeniden kapatın:
PasswordAuthentication nosudo sshd -t
sudo systemctl reload sshMevcut 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.