Kısa cevap: SSH anahtarı, şifre yerine bir anahtar çifti ile kimlik doğrulamanızı sağlar. ssh-keygen -t ed25519 komutuyla çift üretir, açık anahtarı sunucudaki ~/.ssh/authorized_keys dosyasına eklersiniz. Sonra sshd_config içinde PasswordAuthentication no diyerek şifreyle girişi tamamen kapatabilirsiniz. Kritik uyarı: şifre girişini kapatmadan önce anahtarla girişi ikinci bir terminal penceresinde mutlaka test edin, aksi halde sunucuya kilitlenirsiniz.
Sunucunuza şifreyle bağlanıyorsanız internete açık 22 numaralı port her gün otomatik deneme trafiği alır. Anahtar tabanlı kimlik doğrulama bu saldırı yüzeyini pratikte sıfıra indirir. Protokolün kendisi hakkında temel bilgi için SSH nedir yazımıza bakabilirsiniz; burada doğrudan uygulamaya giriyoruz.
Anahtar çifti nasıl çalışır?
İki dosya üretilir ve ikisinin görevi farklıdır:
- Özel anahtar (
id_ed25519): yalnızca sizin bilgisayarınızda kalır. Kimseyle paylaşılmaz, sunucuya kopyalanmaz. - Açık anahtar (
id_ed25519.pub): sunucuya kopyalanır. İçeriği gizli değildir, sızması bir şey ifade etmez.
Bağlantı sırasında sunucu size açık anahtarla şifrelenmiş bir soru sorar, siz özel anahtarla cevaplarsınız. Özel anahtar hiçbir zaman ağ üzerinden geçmez. Şifre yönteminden farkı tam olarak budur.
Adım 1: Anahtar çiftini oluşturma
Kendi bilgisayarınızda (sunucuda değil) terminal açıp şu komutu çalıştırın:
ssh-keygen -t ed25519 -C "ad@bilgisayarim"
Neden ed25519, neden RSA değil? Ed25519 daha kısa anahtarla daha güçlü koruma verir ve doğrulaması hızlıdır. Çok eski bir sunucuyla çalışmak zorundaysanız -t rsa -b 4096 kullanabilirsiniz, ama yeni kurulumlarda ed25519 doğru seçimdir.
Komut size iki şey sorar. Dosya yolunu boş bırakıp varsayılanı kabul edebilirsiniz. İkinci soru olan parola (passphrase) alanını boş bırakmayın: özel anahtar dosyanız çalınırsa parola tek savunma hattınız olur. Her bağlantıda parola yazmamak için ssh-agent kullanırsınız, yani parola koymak günlük kullanımı zorlaştırmaz.
Adım 2: Açık anahtarı sunucuya ekleme
En kolay yol tek komuttur:
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu-adresi
Komut sizden bir kez şifre isteyecek ve açık anahtarı doğru dosyaya, doğru izinlerle ekleyecektir. ssh-copy-id yoksa elle de yapabilirsiniz:
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
İzinler önemlidir. SSH, izinleri fazla açık olan dosyaları güvenlik gereği yok sayar ve sebep söylemeden şifre sormaya devam eder. Sunucuda şu ayarlar doğru olmalı:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Anahtar eklediniz ama hâlâ şifre soruluyorsa bakılacak ilk yer budur.
Windows'ta nasıl yapılır?
Windows 10 ve sonrasında OpenSSH hazır gelir, yani PowerShell veya Terminal açıp yukarıdaki komutları aynen kullanabilirsiniz. Anahtarlar C:\Users\KullaniciAdi\.ssh klasörüne düşer.
PuTTY kullanıyorsanız durum biraz farklı: PuTTY kendi anahtar biçimini (.ppk) kullanır. PuTTYgen ile anahtar üretir ya da mevcut OpenSSH anahtarınızı içe aktarıp .ppk olarak kaydedersiniz. Sunucuya kopyalanacak olan yine açık anahtardır.
Windows sunucularda uzak masaüstü ile çalışıyorsanız SSH yerine RDP kullanıyorsunuz demektir; o tarafın ayarları için RDP rehberimiz daha uygun.
Adım 3: Şifreyle girişi kapatma
Bu adımı atmadan önce yeni bir terminal penceresi açın ve anahtarla bağlanabildiğinizi doğrulayın. Mevcut oturumunuzu kapatmayın. Bu, kendini kilitlemenin en yaygın sebebidir ve tek çözümü sağlayıcının konsolundan (VNC) müdahale etmektir.
Doğruladıktan sonra sunucuda /etc/ssh/sshd_config dosyasını açıp şu satırları ayarlayın:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password
Ardından servisi yeniden başlatın. Dağıtıma göre komut systemctl restart sshd ya da systemctl restart ssh olur. Yeniden başlatma mevcut oturumunuzu düşürmez, o yüzden aynı pencereden güvenle çalıştırabilirsiniz.
PermitRootLogin prohibit-password satırı root girişini tamamen kapatmaz, yalnızca şifreyle root girişini engeller. Anahtarla root girişi çalışmaya devam eder. Daha sıkı bir kurulum isterseniz no yazıp sudo yetkili normal bir kullanıcıyla çalışın.
Aynı anahtarı birden fazla sunucuda kullanabilir miyim?
Evet, teknik olarak sorun yok, ama iş ayrımı yapmak daha güvenlidir. Açık anahtarınızı istediğiniz kadar sunucuya ekleyebilirsiniz. Ancak özel anahtarınız ele geçerse aynı anahtarı kabul eden bütün sunucular birden risk altına girer.
Pratik bir denge: kişisel makineniz için bir anahtar, otomasyon ve dağıtım işleri için ayrı bir anahtar. Böylece bir otomasyon anahtarı sızdığında insan erişimini iptal etmek zorunda kalmazsınız.
Anahtarla girişte sık görülen dört sorun
1. Hâlâ şifre soruluyor. Neredeyse her zaman izin sorunudur. ~/.ssh 700, authorized_keys 600 olmalı ve ev dizini başka kullanıcılara yazılabilir olmamalı.
2. "Permission denied (publickey)". Sunucu artık yalnızca anahtar kabul ediyor ama sizin gönderdiğiniz anahtar listede yok. Doğru özel anahtarı belirtmek için ssh -i ~/.ssh/id_ed25519 kullanici@sunucu deneyin.
3. Yanlış kullanıcı adı. Anahtar kullanıcıya bağlıdır, sunucuya değil. root için eklediğiniz anahtar ubuntu kullanıcısında çalışmaz.
4. Bağlantı hiç kurulmuyor. Bu artık anahtar sorunu değil, ağ sorunudur. Zaman aşımı ve port konularını FTP ve SSH bağlantı sorunları yazısında ele aldık.
Şifreyi tamamen unuttum, kilitlendim
Anahtarınız da yoksa ve şifre girişi kapalıysa SSH üzerinden dönüş yolu kalmaz. Bu durumda sağlayıcınızın konsolundan (VNC) veya kurtarma modundan müdahale etmek gerekir. Bu senaryoyu ayrı bir yazıda anlattık: sunucu root şifresini sıfırlama.
Kök erişimi verilen, kendi anahtarınızı kurabileceğiniz bir sunucu arıyorsanız VDS kiralama sayfasındaki paketlere bakabilirsiniz; kurulumda işletim sistemini siz seçiyorsunuz.
Sık Sorulan Sorular
SSH anahtarı nasıl oluşturulur?
Kendi bilgisayarınızda ssh-keygen -t ed25519 -C "ad@bilgisayarim" komutunu çalıştırın. Komut bir özel ve bir açık anahtar üretir. Açık anahtarı sunucuya kopyalarsınız, özel anahtar sizde kalır.
Anahtar eklendi ama şifre sormaya devam ediyor, neden?
En yaygın sebep izinlerdir. Sunucuda ~/.ssh dizini 700, authorized_keys dosyası 600 olmalıdır. Ev dizini başka kullanıcılara yazılabilir durumdaysa SSH anahtarı güvenlik gereği yok sayar.
Özel anahtara parola koymak zorunlu mu?
Zorunlu değil ama şiddetle önerilir. Parolasız bir özel anahtar, dosyayı ele geçiren herkese sunucunuzu açar. Her bağlantıda parola yazmamak için ssh-agent kullanabilirsiniz.
Şifreyle girişi kapatırsam kilitlenir miyim?
Anahtarla girişi önceden test etmezseniz evet. Ayarı değiştirmeden önce ikinci bir terminal penceresinde anahtarla bağlanabildiğinizi doğrulayın ve mevcut oturumunuzu kapatmayın.
Aynı SSH anahtarını birkaç sunucuda kullanmak güvenli mi?
Teknik olarak sorun yoktur, ancak özel anahtarınız sızarsa o anahtarı kabul eden tüm sunucular etkilenir. İnsan erişimi ile otomasyon için ayrı anahtarlar kullanmak daha güvenli bir düzendir.
RSA yerine ed25519 mü kullanmalıyım?
Yeni kurulumlarda ed25519 tercih edilir; daha kısa anahtarla daha güçlü koruma sağlar ve hızlıdır. Yalnızca ed25519 desteklemeyen çok eski bir sunucuyla çalışmanız gerekiyorsa 4096 bit RSA kullanın.



