Şimdiye kadar bir Linux sunucusuna bağlanmak için parola kullandıysanız, muhtemelen bu yöntemin yalnızca yavaş ve sıkıcı olmadığını, aynı zamanda sunucunuzun en büyük güvenlik açıklarından biri olduğunu biliyorsunuzdur. SSH servisine yönelik brute-force saldırıları, internete bağlı her sunucunun günlük olarak karşılaştığı en yaygın tehditlerden biridir. Bu sorun için standart ve neredeyse zorunlu çözüm, SSH anahtarı kullanmaktır. Bu makalede sade bir dille ve pratik örneklerle nasıl bir anahtar çifti oluşturacağınızı, genel anahtarı sunucuya nasıl yerleştireceğinizi ve son olarak parola ile girişi tamamen nasıl devre dışı bırakacağınızı öğreneceksiniz.
SSH Anahtarı Nedir ve Neden Kullanmalıyız?
SSH anahtarı, asimetrik şifrelemeye dayalı bir kimlik doğrulama yöntemidir. Ağ üzerinden bir parola göndermek yerine (ki bu her zaman dinlenebilir veya tahmin edilebilir), matematiksel bir anahtar çifti kullanırsınız: yalnızca sisteminizde (istemci) tutulan bir özel anahtar ve sunucuya yerleştirilen bir genel anahtar. Sunucuya girmek istediğinizde, sunucu yalnızca özel anahtarınızla çözülebilecek şifreli bir meydan okuma gönderir. Bu süreç yalnızca daha güvenli olmakla kalmaz, aynı zamanda parolasız giriş imkânı da sağlar.
Bu yöntemin ana avantajı, özel anahtarın cihazınızdan asla çıkmaması ve ağ üzerinde hiçbir parolanın taşınmamasıdır. Birisi ağ trafiğini dinlese bile yararlı bir bilgi elde edemez. Ayrıca, özel anahtarınız için bir passphrase belirleyebilirsiniz; böylece birisi anahtar dosyanıza erişse bile onu kullanamaz.
Ön Koşullar ve Hazırlık
Bu eğitimi takip etmek için aşağıdakilere ihtiyacınız var:
- SSH erişimi olan bir Linux sunucusu (Ubuntu, Debian, CentOS veya başka bir dağıtım)
- Sunucuya bağlanmak istediğiniz bir istemci sistem (dizüstü bilgisayar veya kişisel bilgisayar)
- Her iki sistemde de terminal erişimi
Linux ve macOS sistemlerinde ssh-keygen aracı varsayılan olarak kuruludur. Windows kullanıyorsanız, Windows 10 ve 11'in yeni sürümleri OpenSSH içerir ve PowerShell veya CMD kullanabilirsiniz. Kurulu olduğundan emin olmak için şu komutu çalıştırın:
ssh -V
Çıktı OpenSSH sürümünü içeriyorsa her şey hazırdır.
SSH Anahtar Çifti Oluşturma
İlk adım, istemci sistemde anahtar çiftini üretmektir. Terminalde şu komutu çalıştırın:
ssh-keygen -t ed25519 -C "your_email@example.com"
Bu komutta:
-t ed25519şifreleme algoritmasını belirtir.ed25519, RSA'dan daha hızlı ve daha güvenlidir ve daha kısa anahtarlar üretir. Sunucunuz bu algoritmayı desteklemiyorsa (çok eski sunucular), 4096 bit uzunluğundarsakullanabilirsiniz:ssh-keygen -t rsa -b 4096-Canahtara bir yorum (genellikle e-postanız) ekler; böylece hangi anahtarın hangi sisteme ait olduğunu daha sonra anlayabilirsiniz.
Komutu çalıştırdıktan sonra anahtar dosyasını nereye kaydedeceğiniz sorulur. Varsayılan yol ~/.ssh/id_ed25519 genellikle en iyi seçenektir. Sadece Enter'a basın. Ardından bir passphrase belirlemeniz istenir. Bu, özel anahtarın kendisi için ek bir paroladır. Daha fazla güvenlik istiyorsanız uzun bir ifade girin. Parolasız giriş yapmayı tercih ederseniz boş bırakabilirsiniz, ancak bu güvenliği azaltır.
Bu adımdan sonra ~/.ssh/ dizininde iki dosya oluşturulur:
id_ed25519— özel anahtar (bu dosyayı asla kimseyle paylaşmayın)id_ed25519.pub— genel anahtar (bu dosyayı sunucuya yerleştireceğiz)
Genel anahtarın içeriğini görüntülemek için şu komutu kullanın:
cat ~/.ssh/id_ed25519.pub
Çıktı şuna benzer olacaktır:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8J3hY8xQy7vZ2mX9sLpQnR4vKcWxTz6HjYbGfQ your_email@example.com
Bu dizeyi kopyalayın; bir sonraki adımda ihtiyacınız olacak.
Yaygın Hata: Özel Anahtar Yerine Genel Anahtar Kullanmak
En yaygın hatalardan biri, id_ed25519.pub (genel anahtar) yerine id_ed25519 (özel anahtar) dosyasının içeriğini kopyalamaktır. Bunu asla yapmayın. Özel anahtar her zaman sisteminizde kalmalıdır ve başka birinin eline geçerse, o kişi parola olmadan sunucunuza girebilir.
Genel Anahtarı Sunucuya Aktarma
Artık genel anahtarınız olduğuna göre, onu sunucudaki ~/.ssh/authorized_keys dosyasına eklemeniz gerekir. En basit ve en güvenilir yöntem ssh-copy-id komutunu kullanmaktır. Bu komut genel anahtarı otomatik olarak sunucuya aktarır ve doğru konuma yerleştirir:
ssh-copy-id username@server_ip
username yerine sunucudaki kullanıcı adınızı ve server_ip yerine sunucunun IP adresini veya alan adını girin. İlk seferde kullanıcı parolanız istenir. Parolayı girdikten sonra genel anahtar authorized_keys dosyasına eklenir.
Herhangi bir nedenle ssh-copy-id mevcut değilse (örneğin Windows'ta), bunu manuel olarak yapabilirsiniz. Önce parola ile sunucuya giriş yapın:
ssh username@server_ip
Ardından sunucuda .ssh dizinini oluşturun ve authorized_keys dosyasını oluşturun:
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
Şimdi daha önce kopyaladığınız genel anahtar içeriğini dosyanın sonuna ekleyin. nano düzenleyicisini kullanabilirsiniz:
nano ~/.ssh/authorized_keys
İçeriği yapıştırın, ardından Ctrl+X, Y ve Enter ile kaydedip çıkın. Son olarak doğru izinleri ayarlayın:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Bu izinler çok önemlidir. Dosyalar çok açık olursa sunucu anahtarı kabul etmeyi reddedebilir.
SSH Anahtarı ile Bağlantıyı Test Etme
Parolayı devre dışı bırakmadan önce mutlaka anahtar ile bağlantıyı test edin. İstemci sistemden şu komutu çalıştırın:
ssh username@server_ip
Her şey doğruysa parola sorulmadan sunucuya giriş yaparsınız (tabii özel anahtar için passphrase belirlediyseniz, onu girmeniz istenir). Permission denied (publickey) gibi bir hata alırsanız, genel anahtar doğru eklenmemiş veya izinler hatalı olabilir. İzinleri tekrar kontrol edin ve genel anahtar içeriğinin tam olarak tek satırda ve fazladan boşluk olmadan kopyalandığından emin olun.
Parola ile Girişi Devre Dışı Bırakma
SSH anahtarı ile bağlantının doğru çalıştığından emin olduktan sonra, parola ile girişi devre dışı bırakmanın zamanı geldi. Bu, brute-force saldırılarını önler ve sunucunuzun güvenliğini daha üst seviyeye taşır.
Önce SSH yapılandırma dosyasını düzenleyin:
sudo nano /etc/ssh/sshd_config
Bu dosyada aşağıdaki satırları arayın ve değerleri değiştirin:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
Bu satırlar yoksa, dosyanın sonuna ekleyin. PasswordAuthentication no satırının en önemli satır olduğuna dikkat edin. Değişiklikleri uyguladıktan sonra dosyayı kaydedin ve SSH servisini yeniden başlatın:
sudo systemctl restart sshd
Debian tabanlı dağıtımlarda (Ubuntu gibi) servis adı sshd yerine ssh olabilir. Bu durumda sudo systemctl restart ssh komutunu kullanın.
Yaygın Hata: Kendinizi Sunucudan Kilitlemek
Bu aşamadaki en büyük risk, anahtarınız düzgün çalışmazsa parolayı devre dışı bıraktıktan sonra sunucuya girmek için hiçbir yolunuzun kalmamasıdır. Bu felaketi önlemek için iki şey yapın:
- Parolayı devre dışı bırakmadan önce sunucuya ikinci bir SSH oturumu açın ve onu açık tutun. Bir sorun olursa, yapılandırmayı düzeltmek için bu oturumu kullanın.
- Yapılandırmayı değiştirdikten sonra ve mevcut oturumu kapatmadan önce, yeni bir terminalde anahtar ile bağlantıyı test edin. Başarılıysa eski oturumu kapatabilirsiniz.
Ayrıca değişiklikleri uygulamadan önce yapılandırma dosyasının bir yedeğini almanız önerilir:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Daha sonra bir sorun olursa, şu komutla yapılandırmayı geri alabilirsiniz:
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
Birden Fazla Anahtar Yönetimi ve ssh-agent Kullanımı
Birden fazla sunucu kullanıyorsanız, her biri için ayrı bir anahtar oluşturabilirsiniz. Daha iyi yönetim için istemci sistemde ~/.ssh/config dosyasını oluşturabilirsiniz. Bu dosya, her sunucu için bir takma ad tanımlamanıza ve belirli ayarlar uygulamanıza olanak tanır. Örnek:
Host myserver
HostName 192.168.1.100
User root
IdentityFile ~/.ssh/id_ed25519_server1
Port 22
Artık uzun komutu yazmak yerine sadece şunu yazmanız yeterlidir:
ssh myserver
Anahtarlarınız için passphrase belirlediyseniz, her bağlantıda girmek can sıkıcı olabilir. Bu durumda, anahtarları bellekte tutan ve passphrase'i bir kez girdikten sonra sistem açık olduğu sürece tekrar sormayan ssh-agent kullanabilirsiniz:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Bundan sonra aynı terminal oturumunda sunucuya bağlantı passphrase sorulmadan gerçekleşir.
Daha Fazla Güvenlik İçin Ek İpuçları
Parolayı devre dışı bırakmak SSH güvenliğini artırmanın yalnızca bir adımıdır. Sunucunuzu daha fazla korumak için aşağıdakileri de göz önünde bulundurun:
- SSH portunu değiştirme: Varsayılan 22 portunu alışılmadık bir porta değiştirmek, otomatik saldırıların sayısını önemli ölçüde azaltır. Bunu
sshd_configdosyasındaPort 2222satırıyla yapın. - İzin verilen kullanıcıları sınırlama:
AllowUsers usernamesatırıyla yalnızca belirli kullanıcıların giriş yapmasına izin verin. - fail2ban kullanımı: Bu araç, birkaç başarısız deneme yapan IP adreslerini otomatik olarak engeller.
- Kök (root) girişini devre dışı bırakma:
PermitRootLogin nosatırıyla doğrudan root kullanıcısı ile girişi devre dışı bırakın ve her zaman normal bir kullanıcıyla giriş yapıp komutlarısudoile çalıştırın.
Projeleriniz için güvenli ve ölçeklenebilir bir altyapı arıyorsanız, SSH desteği ve gelişmiş yönetim özellikleriyle ServerNet bulut sunucuları uygun bir seçenek olabilir.
Özet
SSH anahtarı kullanmak, her sunucu yöneticisi için temel bir beceridir. Bu makaledeki adımları izleyerek nasıl bir anahtar çifti oluşturacağınızı, genel anahtarı sunucuya yerleştireceğinizi ve son olarak parola ile girişi nasıl devre dışı bırakacağınızı öğrendiniz. Bu, sunucunuzun güvenliğini önemli ölçüde artırmanın yanı sıra sunucuyla günlük çalışma deneyiminizi de çok daha akıcı hale getirir. Güvenlik değişiklikleri uygulamadan önce her zaman bir yedek almayı ve mevcut oturumu kapatmadan önce yeni bağlantıyı test etmeyi unutmayın. Bu ipuçlarına uyarak anahtar tabanlı kimlik doğrulamanın avantajlarından gönül rahatlığıyla yararlanabilirsiniz.