SSH anahtarıyla giriş: anahtar oluşturmak, sunucuya eklemek ve şifreli girişi kapatmak
İnternete açık bir Linux sunucuya şifreyle SSH girişi yapılıyorsa, otomatik botlar her gün binlerce şifre denemesi yapar. SSH anahtarıyla giriş hem daha güvenlidir hem de her seferinde şifre yazma zahmetini ortadan kaldırır.
Nasıl çalışır?
Bir anahtar çifti oluşturursun: özel anahtar (private key) yalnızca senin bilgisayarında kalır, açık anahtar (public key) sunucuya eklenir. Giriş sırasında sunucu, özel anahtarın sende olduğunu şifre gönderilmeden doğrular.
1. Anahtar oluşturmak
Windows 10/11 (PowerShell), macOS ve Linux'ta OpenSSH hazır gelir:
ssh-keygen -t ed25519 -C "dizustu-2026"
- Kaydedilecek yeri sorduğunda varsayılanı kabul edebilirsin (
~/.ssh/id_ed25519). - Parola (passphrase) belirle. Bilgisayarın çalınsa ya da dosya ele geçirilse bile anahtar parola olmadan kullanılamaz. Her seferinde yazmak istemiyorsan
ssh-agentparolayı oturum boyunca hatırlar. -Cile verdiğin açıklama, sunucuda hangi anahtarın hangi cihaza ait olduğunu anlamanı sağlar.
İki dosya oluşur: id_ed25519 (özel, asla paylaşma) ve id_ed25519.pub (açık).
2. Açık anahtarı sunucuya eklemek
Linux ve macOS'ta:
ssh-copy-id kullanici@sunucu-ip
Windows'ta ssh-copy-id yoksa PowerShell'de:
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"
Ardından yeni bir terminalde ssh kullanici@sunucu-ip ile şifre sorulmadan (yalnızca anahtar parolası sorularak) girebildiğini doğrula.
3. Şifreli girişi kapatmak
Bu adımdan önce anahtarla girişin çalıştığından kesinlikle emin ol ve mevcut SSH oturumunu kapatma. Aksi halde sunucunun dışında kalabilirsin.
/etc/ssh/sshd_config dosyasında (ya da /etc/ssh/sshd_config.d/ altındaki bir dosyada):
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password
PermitRootLogin no daha da güvenlidir; bunun için önce sudo yetkili ayrı bir kullanıcı oluşturmuş olman gerekir.
Yapılandırmayı kontrol edip servisi yeniden yükle:
sudo sshd -t
sudo systemctl reload ssh # bazı dağıtımlarda: sshd
Açık olan oturumu kapatmadan yeni bir terminalden tekrar giriş yapmayı dene. Sorun varsa açık oturumdan düzeltebilirsin.
Bazı bulut sağlayıcılarının imajlarında sshd_config.d altındaki bir dosya PasswordAuthentication yes diyerek ana ayarı ezebilir. Ayarın etkin olup olmadığını sudo sshd -T | grep -i passwordauthentication ile kontrol edebilirsin.
4. Kolaylık: SSH yapılandırma dosyası
~/.ssh/config dosyasına ekleyerek uzun komutları kısaltabilirsin:
Host sunucum
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
Artık ssh sunucum yazman yeterli.
Güvenlik önerileri
- Her cihaz için ayrı anahtar oluştur; bir cihaz kaybolursa sunucudaki
authorized_keysdosyasından yalnızca onun satırını silersin. - Özel anahtarı e-postayla, mesajla ya da bulut klasöründe paylaşma.
- Ek koruma için forumdaki "Fail2ban ile SSH ve web saldırılarını otomatik engellemek" ve "Yeni Linux sunucuda kurulumdan sonraki ilk güvenlik adımları" rehberlerine bakabilirsin.
Bağlantı sırasında "Permission denied (publickey)" gibi bir hata alırsan ssh -v kullanici@sunucu çıktısını (IP ve kullanıcı adlarını gizleyerek) bu konunun altına ekleyebilirsin.