SSH Anahtar ile Şifresiz Giriş ve Parola Girişini Kapatma (Adım Adım)

Yaklaşık 3 dakikalık okuma

Sunucuya her bağlandığınızda parola yazmak hem zaman kaybıdır hem de güvenlik açısından zayıf bir yöntemdir. İnternete açık bir SSH sunucusunun loglarına baktığınızda, dakikada onlarca otomatik parola deneme (brute-force) girişimi görmeniz şaşırtıcı değildir. Bu rehberde SSH anahtar çifti oluşturup sunucuya şifresiz giriş yapmayı, ardından parola ile girişi tamamen kapatmayı adım adım anlatıyorum.

SSH’a yeniyseniz önce Temel SSH Komutları yazısına göz atmanızı öneririm.

SSH Anahtarı Nasıl Çalışır?

Anahtar tabanlı kimlik doğrulamada iki dosya vardır:

  • Özel anahtar (private key): Sadece sizin bilgisayarınızda durur, kimseyle paylaşılmaz. Örneğin ~/.ssh/id_ed25519.
  • Açık anahtar (public key): Sunucuya kopyalanır. Örneğin ~/.ssh/id_ed25519.pub.

Bağlantı sırasında sunucu, sizin özel anahtara sahip olduğunuzu matematiksel olarak doğrular; özel anahtar ağ üzerinden hiçbir zaman gönderilmez. Bu yüzden parolanın tahmin edilmesi ya da ele geçirilmesi riski ortadan kalkar.

1. Adım: Anahtar Çifti Oluşturma

Günümüzde önerilen algoritma Ed25519‘dur: kısa, hızlı ve güvenlidir. Linux, macOS ve Windows 10/11 (PowerShell) üzerinde aynı komut çalışır:

ssh-keygen -t ed25519 -C "bayram@laptop"

Komut size dosya konumunu ve bir passphrase (anahtar parolası) soracaktır. Konum için Enter’a basıp varsayılanı kabul edebilirsiniz. Passphrase boş bırakılabilir ama önerim bir passphrase belirlemenizdir: dizüstü bilgisayarınız çalınsa bile anahtarınız tek başına işe yaramaz.

Çok eski sistemlerle uyumluluk gerekiyorsa RSA kullanabilirsiniz:

ssh-keygen -t rsa -b 4096 -C "bayram@laptop"

2. Adım: Açık Anahtarı Sunucuya Kopyalama

Linux ve macOS

En kolay yol ssh-copy-id aracıdır. Bu adımda sunucu parolanızı son kez yazacaksınız:

ssh-copy-id kullanici@sunucu-ip

Araç, açık anahtarı sunucudaki ~/.ssh/authorized_keys dosyasına ekler ve dosya izinlerini doğru şekilde ayarlar.

Windows (PowerShell)

Windows’ta ssh-copy-id bulunmaz. Aynı işi tek satırla yapabilirsiniz:

type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh kullanici@sunucu-ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. Adım: Şifresiz Girişi Test Etme

ssh kullanici@sunucu-ip

Parola sorulmadan (ya da yalnızca anahtar passphrase’i sorularak) bağlanabiliyorsanız anahtar doğru çalışıyor demektir. Hâlâ sunucu parolası soruluyorsa izinleri kontrol edin; SSH, izinleri gevşek olan dosyaları güvenlik nedeniyle yok sayar:

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

4. Adım: Parola ile Girişi Kapatma

Önemli: Bu adımdan önce anahtarla giriş yapabildiğinizden emin olun ve mevcut SSH oturumunuzu kapatmayın. Yanlış bir ayar sizi sunucunun dışında bırakabilir.

SSH sunucu ayar dosyasını açın:

sudo nano /etc/ssh/sshd_config

Aşağıdaki satırları bulun (başlarında # varsa kaldırın) ve değerleri şu şekilde ayarlayın:

PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password

Güncel Ubuntu ve Debian sürümlerinde /etc/ssh/sshd_config.d/ klasöründeki dosyalar ana dosyadaki ayarları ezebilir. Özellikle bulut sunucularda bulunan 50-cloud-init.conf dosyasında PasswordAuthentication yes satırı olup olmadığını kontrol edin:

sudo grep -ri passwordauthentication /etc/ssh/sshd_config.d/

Ayar dosyasında hata olmadığını doğrulayıp servisi yeniden başlatın:

sudo sshd -t
sudo systemctl restart ssh

RHEL, Rocky veya AlmaLinux kullanıyorsanız servis adı sshd‘dir.

5. Adım: Doğrulama

Yeni bir terminal açıp parola ile girişi zorlamayı deneyin:

ssh -o PubkeyAuthentication=no kullanici@sunucu-ip

Beklenen sonuç Permission denied (publickey) hatasıdır. Bu, sunucunun artık parola kabul etmediğini gösterir.

Birden Fazla Sunucu İçin Kolaylık: SSH Config

Sık bağlandığınız sunucular için ~/.ssh/config dosyası oluşturarak uzun komutlardan kurtulabilirsiniz:

Host web1
    HostName 203.0.113.10
    User bayram
    Port 22
    IdentityFile ~/.ssh/id_ed25519

Artık sadece ssh web1 yazmanız yeterli.

Sık Yapılan Hatalar

BelirtiOlası nedenÇözüm
Hâlâ parola soruluyorauthorized_keys izinleri yanlışchmod 600 ve chmod 700 ~/.ssh
Parola girişi kapanmadısshd_config.d içindeki dosya ayarı eziyorİlgili dosyada PasswordAuthentication no yapın
Permission denied (publickey)Yanlış anahtar ya da kullanıcıssh -v ile hangi anahtarın denendiğine bakın
Bağlantı tamamen kesildiAyar hatasıSağlayıcının konsol/KVM erişimiyle düzeltin

Sonuç

Anahtar tabanlı giriş, bir SSH sunucusuna yapabileceğiniz en etkili güvenlik iyileştirmelerinden biridir ve kurulumu birkaç dakika sürer. Bir sonraki adım olarak sunucuya yalnızca gerekli portları açan bir güvenlik duvarı kurmanızı öneririm.