İnternete açık bir Linux sunucusuna parola ile SSH bağlantısı yapmak, sunucunuzu aralıksız kaba kuvvet (brute-force) ve sözlük saldırılarına açık bırakır. SSH anahtar tabanlı kimlik doğrulama mekanizması, asimetrik kriptografi kullanarak parolalara olan bağımlılığı tamamen ortadan kaldırır ve sunucu erişim güvenliğini en üst düzeye çıkarır.
Bu rehberde; modern Ed25519 algoritmasıyla SSH anahtarı üretmeyi, anahtarı uzak sunucuya aktarmayı ve /etc/ssh/sshd_config dosyasında kritik güvenlik sıkılaştırma (hardening) ayarlarını adım adım uygulayacağız.
SSH Anahtar Mantığı Nasıl Çalışır?
SSH anahtar tabanlı doğrulama, açık anahtarlı şifreleme (public-key cryptography) prensibine dayanır:
- Özel Anahtar (Private Key –
id_ed25519): Yalnızca sizin yerel bilgisayarınızda saklanır. Asla kimseyle paylaşılmamalıdır. - Açık Anahtar (Public Key –
ided25519.pub): Erişmek istediğiniz sunucudaki~/.ssh/authorizedkeysdosyasına eklenir. Herkese açık olması güvenlik riski oluşturmaz.
Bağlantı sırasında sunucu bir meydan okuma (challenge) mesajı gönderir. İstemci bu mesajı kendi özel anahtarıyla imzalar. Sunucu, elindeki açık anahtarla bu imzayı doğrularsa bağlantı onaylanır. Parola transferi veya parola tahmini kesinlikle gerçekleşmez.
Adım 1: Güvenli SSH Anahtarı Üretmek (ssh-keygen)
Geçmişte yaygın olan RSA anahtarları (2048 veya 4096 bit) yerine günümüzde çok daha hızlı, kısa ve eliptik eğri tabanlı olan Ed25519 standardı önerilmektedir.
Yerel bilgisayarınızın terminalinde şu komutu çalıştırın:
# Modern Ed25519 anahtar çifti oluşturma
ssh-keygen -t ed25519 -C "admin@ahakan.com"
İşlem sırasında:
- Dosya konumu sorulduğunda
Entertuşuna basarak varsayılanı (~/.ssh/id_ed25519) seçin. - Passphrase (Parola Koruması): Özel anahtarınızı korumak için güçlü bir parola girmeniz şiddetle önerilir. Bu parola, anahtarınız çalınsa dahi saldırganların onu kullanmasını engeller.
Eğer eski sistemlerle uyumluluk gerekirse 4096 bitlik RSA alternatifi:
ssh-keygen -t rsa -b 4096 -C "admin@ahakan.com"
Adım 2: Açık Anahtarı Sunucuya Yüklemek (ssh-copy-id)
Ürettiğiniz açık anahtarı sunucuya aktarmanın en zahmetsiz ve hatasız yolu ssh-copy-id aracıdır:
# Açık anahtarı uzak sunucuya kopyala
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu_ip_adresi
Bu komut:
- Sunucuda
~/.sshdizini yoksa oluşturur. ~/.ssh/authorized_keysdosyasının sonuna anahtarınızı ekler.- chmod rehberimizde belirttiğimiz doğru izinleri otomatik ayarlar (
.sshiçin700,authorized_keysiçin600).
Manuel Yöntem (ssh-copy-id yoksa)
Eğer Windows PowerShell veya kısıtlı bir ortamdaysanız:
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Adım 3: Parolasız Bağlantıyı Test Edin
Henüz sunucu yapılandırmasını değiştirmeden önce yeni bir terminal açarak bağlantının anahtarla kurulduğunu doğrulayın:
ssh kullanici@sunucu_ip_adresi
Sistem sizden sunucu kullanıcı şifresi yerine özel anahtarınızın “passphrase” ini soruyorsa anahtar kurulumu başarıyla tamamlanmıştır!
Adım 4: SSH Sunucusunu Sıkılaştırma (Hardening)
Anahtar ile giriş sağlandıktan sonra, kaba kuvvet saldırılarını tamamen engellemek için parola ile girişi devre dışı bırakmalı ve root erişimini sınırlandırmalıyız.
Sunucuda SSH yapılandırma dosyasını açın:
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırları bulun ve değerlerini güncelleyin:
# 1. Standart 22 portunu değiştir (Örn: 2222)
Port 2222
# 2. Root kullanıcısının doğrudan SSH yapmasını engelle
PermitRootLogin no
# 3. Parola ile girişi tamamen kapat (SADECE anahtarla girişe izin ver)
PasswordAuthentication no
ChallengeResponseAuthentication no
# 4. Boş parolaları engelle
PermitEmptyPasswords no
# 5. Maksimum kimlik doğrulama deneme sayısını sınırla
MaxAuthTries 3
# 6. X11 yönlendirmesini kapat (Kullanılmıyorsa)
X11Forwarding no
HAYATİ UYARI: Mevcut aktif terminal oturumunuzu ASLA KAPATMAYIN! Yapılandırmayı test etmek için ikinci bir terminal penceresi açacaksınız.
Değişiklikleri Uygulama ve Doğrulama
# 1. Sözdizimi hatası var mı test et (-t)
sudo sshd -t
# 2. Eğer hata yoksa servisi yeniden başlat
sudo systemctl restart sshd
# 3. Eğer port değiştirdiyseniz güvenlik duvarında yeni portu açın!
sudo ufw allow 2222/tcp
Şimdi bilgisayarınızda yeni bir terminal açıp test edin:
ssh -p 2222 kullanici@sunucu_ip_adresi
Bağlantı sorunsuz açılıyorsa sunucunuz artık parola denemelerine karşı tamamen zırhlanmış durumdadır!
Yerel SSH İstemcisi İpuçları: ~/.ssh/config
Her defasında ssh -p 2222 kullanici@198.51.100.5 yazmak yerine yerel bilgisayarınızda ~/.ssh/config dosyası oluşturabilirsiniz:
Host production
HostName 198.51.100.5
User hakan
Port 2222
IdentityFile ~/.ssh/id_ed25519
Artık sadece şu komutu yazarak bağlanabilirsiniz:
ssh production
Özet Güvenlik Tablosu
| Ayar Parametresi | Önerilen Değer | Amacı |
|---|---|---|
PasswordAuthentication | no | Brute-force parola denemelerini %100 engeller |
PermitRootLogin | no | Yetkili hesaplara doğrudan sızılmasını önler |
Port | 2222 (vb.) | Otomatik internet tarayıcılarının gürültüsünü keser |
ssh-keygen Algoritması | Ed25519 | En modern ve güçlü kriptografik güvenlik |
Anahtar Dosya İzni | 600 | Özel anahtarın diğer kullanıcılarca okunmasını engeller |
Özet
SSH güvenliği bir sunucunun ilk ve en önemli kalesidir. ssh-keygen ile güçlü bir Ed25519 anahtarı oluşturup parola ile kimlik doğrulamayı devre dışı bıraktığınızda, sunucunuza yönelik en yaygın saldırı vektörünü kalıcı olarak bertaraf etmiş olursunuz.