Giriş: SSH Anahtarları Neden Önemli?
Güvenli Kabuk Protokolü (SSH), uzak sunuculara güvenli bir şekilde bağlanmanın temel yoludur. Geleneksel olarak, SSH bağlantıları kullanıcı adı ve şifre kombinasyonu ile kimlik doğrulaması yapar. Ancak şifre tabanlı kimlik doğrulama, zayıf şifreler, kaba kuvvet saldırıları ve insan hatası gibi çeşitli güvenlik riskleri taşır. SSH anahtarları ise bu riskleri minimize ederek çok daha güvenli ve pratik bir alternatif sunar.
SSH anahtarları, kriptografik bir anahtar çifti kullanarak çalışır: özel (private) anahtar ve genel (public) anahtar. Özel anahtar, yerel bilgisayarınızda (istemci) gizli tutulurken, genel anahtar erişmek istediğiniz uzak sunucuda bulunur. Bağlantı kurulduğunda, sunucu genel anahtarı kullanarak istemcinin özel anahtara sahip olduğunu kriptografik olarak doğrular. Bu yöntem, uzun ve karmaşık şifreleri ezberleme veya girme ihtiyacını ortadan kaldırırken, aynı zamanda çok daha güçlü bir güvenlik katmanı sağlar.
Bu rehberde, Rocky Linux 8 üzerinde adım adım SSH anahtar çifti oluşturma, genel anahtarınızı sunucuya kopyalama ve anahtarlarınızı kullanarak güvenli bir şekilde bağlantı kurma süreçlerini ele alacağız. Ayrıca, SSH anahtar tabanlı kimlik doğrulamasını daha da güçlendirmek için ek güvenlik önlemleri ve pratik ipuçları da sunacağız.
SSH Anahtar Çifti Oluşturma
SSH anahtarlarını kullanmaya başlamanın ilk adımı, yerel Rocky Linux 8 sisteminizde bir anahtar çifti oluşturmaktır. Bu işlem için ssh-keygen komutu kullanılır. Modern ve güvenli bir anahtar türü olan ED25519’u kullanmanızı şiddetle tavsiye ederiz, ancak isterseniz RSA da kullanabilirsiniz.
Anahtar Oluşturma Komutu
Terminalinizi açın ve aşağıdaki komutu çalıştırın:
ssh-keygen -t ed25519 -C "kullanici_adiniz@hostname"
Komuttaki parametrelerin anlamları:
-t ed25519: Oluşturulacak anahtarın tipini belirtir. ED25519, modern, hızlı ve güvenli bir asimetrik şifreleme algoritmasıdır. Alternatif olarak-t rsa -b 4096(4096 bit RSA anahtar) kullanabilirsiniz, ancak ED25519 genellikle tercih edilir.-C "kullanici_adiniz@hostname": Anahtarın sonuna bir yorum ekler. Bu, özellikle birden fazla anahtarınız olduğunda veya anahtarınızı paylaştığınızda hangi anahtarın kime ait olduğunu anlamanıza yardımcı olur. E-posta adresiniz veya açıklayıcı bir metin kullanabilirsiniz.
Anahtar Oluşturma Süreci ve Parola (Passphrase)
Komutu çalıştırdıktan sonra, ssh-keygen size birkaç soru soracaktır:
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/kullanici_adiniz/.ssh/id_ed25519):
Varsayılan dosya konumunu (/home/kullanici_adiniz/.ssh/id_ed25519) kabul etmek için Enter tuşuna basmanız yeterlidir. Farklı bir isim vermek isterseniz, buraya yeni bir yol ve dosya adı girebilirsiniz. Genellikle varsayılanı kullanmak en iyisidir.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Bu kısım çok önemlidir. Özel anahtarınız için bir parola (passphrase) belirlemeniz şiddetle tavsiye edilir. Bu parola, özel anahtarınızın çalınması durumunda yetkisiz erişimi engellemek için ek bir güvenlik katmanı sağlar. Her SSH bağlantısında bu parolayı girmeniz gerekecektir. Eğer parola belirlemezseniz, anahtarınız ele geçirildiğinde direkt olarak kullanılabilir hale gelir. Güçlü ve benzersiz bir parola seçmeye özen gösterin.
Parolayı iki kez girdikten sonra, anahtar çifti oluşturulacak ve aşağıdaki gibi bir çıktı göreceksiniz:
Your identification has been saved in /home/kullanici_adiniz/.ssh/id_ed25519
Your public key has been saved in /home/kullanici_adiniz/.ssh/id_ed25519.pub
The key's randomart image is:
+--[ED25519 256]--+
| .o. |
| .o. |
| . + |
| o B o |
| . * + S . |
| + B o . |
| o B E |
| . B |
| . |
+----[SHA256]-----+
Bu çıktı, özel anahtarınızın (id_ed25519) ve genel anahtarınızın (id_ed25519.pub) başarıyla oluşturulduğunu gösterir. Özel anahtarınızın izinleri otomatik olarak sadece size okunabilir (-rw-------) olacak şekilde ayarlanır, bu da başkalarının onu okumasını engeller. Bu izinleri asla değiştirmeyin.
Genel Anahtarı Sunucuya Kopyalama
SSH anahtarlarıyla kimlik doğrulaması yapabilmek için, oluşturduğunuz genel anahtarı erişmek istediğiniz uzak Rocky Linux sunucusuna kopyalamanız gerekir. Bunun için iki ana yöntem bulunmaktadır:
Yöntem 1: ssh-copy-id Kullanımı (Önerilen)
ssh-copy-id aracı, genel anahtarınızı sunucuya kopyalamanın en kolay ve güvenli yoludur. Bu araç, sunucuda ~/.ssh dizinini oluşturur (eğer yoksa), genel anahtarınızı ~/.ssh/authorized_keys dosyasına ekler ve gerekli dosya/dizin izinlerini doğru bir şekilde ayarlar. Bu, manuel olarak izinleri ayarlama hatasını önler.
Yerel makinenizden aşağıdaki komutu çalıştırın:
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici_adi@sunucu_ipadresi_veya_domain
Komutun açıklaması:
-i ~/.ssh/id_ed25519.pub: Kopyalanacak genel anahtar dosyasının yolunu belirtir. Eğer farklı bir isimle anahtar oluşturduysanız, burayı güncelleyin.kullanici_adi@sunucu_ipadresi_veya_domain: Uzak sunucudaki kullanıcı adınız ve sunucunun IP adresi veya alan adıdır.
İlk kez bağlanıyorsanız, sunucunun parmak izini kabul etmeniz istenecektir. Ardından, uzak sunucunun şifresini girmeniz istenecektir (bu, sunucuya ilk kez şifre ile bağlanmak gibidir). Şifreyi doğru girdikten sonra, genel anahtarınız başarıyla kopyalanacaktır:
The authenticity of host 'sunucu_ipadresi (sunucu_ipadresi)' can't be established.
ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'sunucu_ipadresi' (ED25519) to the list of known hosts.
kullanici_adi@sunucu_ipadresi's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'kullanici_adi@sunucu_ipadresi'"
and check to make sure that only the key(s) you wanted were added.
Bu adımdan sonra, genel anahtarınız sunucuda ~/.ssh/authorized_keys dosyasına eklenmiş ve doğru izinlerle yapılandırılmıştır.
Yöntem 2: Manuel Kopyalama
Eğer ssh-copy-id aracı mevcut değilse veya belirli bir port üzerinden bağlanmanız gerekiyorsa (örneğin, ssh-copy-id varsayılan olarak port 22’yi kullanır), genel anahtarınızı manuel olarak kopyalayabilirsiniz.
Adım 1: Genel Anahtarınızı Görüntüleme
Yerel makinenizden genel anahtarınızın içeriğini görüntüleyin:
cat ~/.ssh/id_ed25519.pub
Bu komut, anahtarınızın tamamını terminale yazdıracaktır. Çıktıyı kopyalayın.
Adım 2: Sunucuya Bağlanma ve Dizini Oluşturma
Şifre kullanarak uzak sunucuya bağlanın:
ssh kullanici_adi@sunucu_ipadresi_veya_domain
Eğer sunucuda ~/.ssh dizini yoksa, oluşturun ve doğru izinleri verin:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Adım 3: authorized_keys Dosyasına Ekleme
Şimdi kopyaladığınız genel anahtarı ~/.ssh/authorized_keys dosyasına ekleyin. Eğer dosya yoksa oluşturulacak, varsa anahtar sonuna eklenecektir. Bu işlemi yaparken append (ekleme) operatörü >> kullanmak önemlidir, aksi takdirde mevcut anahtarların üzerine yazabilirsiniz.
echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
PASTE_YOUR_PUBLIC_KEY_HERE kısmına, yerel makinenizden kopyaladığınız genel anahtar içeriğini yapıştırın.
Son olarak, authorized_keys dosyasının izinlerini ayarlayın:
chmod 600 ~/.ssh/authorized_keys
Bu izinler, dosyanın yalnızca sahibi tarafından okunabilir ve yazılabilir olmasını sağlar. Yanlış izinler SSH bağlantı hatalarına neden olabilir.
SSH Anahtarlarıyla Bağlantı Kurma ve Kimlik Doğrulama
Genel anahtarınızı sunucuya kopyaladıktan sonra, SSH anahtarlarınızı kullanarak sunucuya parola girmeden güvenli bir şekilde bağlanabilirsiniz.
Basit Bağlantı
Yerel makinenizden aşağıdaki komutu kullanın:
ssh kullanici_adi@sunucu_ipadresi_veya_domain
Eğer anahtarınızı oluştururken bir parola belirlemişseniz, bu noktada parola istenecektir. Parolanızı girdikten sonra sunucuya başarıyla bağlanacaksınız. Eğer parola belirlemediyseniz, doğrudan sunucuya giriş yapmalısınız.
SSH Agent Kullanımı (Parolalı Anahtarlar İçin)
Eğer özel anahtarınıza bir parola belirlediyseniz, her bağlantıda bu parolayı tekrar tekrar girmek zaman alıcı olabilir. ssh-agent, SSH anahtarlarınızın parolalarını bellekte tutarak bu süreci kolaylaştırır. Bir kez parola girdikten sonra, agent çalışmaya devam ettiği sürece tekrar parola girmenize gerek kalmaz.
Adım 1: ssh-agent’ı Başlatma
Çoğu masaüstü ortamında ssh-agent otomatik olarak başlar. Eğer başlamadıysa veya terminal oturumunuzda kullanmak istiyorsanız:
eval "$(ssh-agent -s)"
Bu komut, ssh-agent‘ı başlatır ve gerekli ortam değişkenlerini ayarlar.
Adım 2: Anahtarınızı Agent’a Ekleme
Özel anahtarınızı ssh-agent‘a eklemek için ssh-add komutunu kullanın:
ssh-add ~/.ssh/id_ed25519
Eğer anahtarınıza bir parola belirlediyseniz, bu noktada parolanızı girmeniz istenecektir. Parolayı girdikten sonra anahtarınız agent’a eklenir ve bir sonraki SSH bağlantınızda parola sormaz.
Agent’a eklenmiş anahtarları görmek için ssh-add -l komutunu kullanabilirsiniz.
SSH Yapılandırma Dosyası (~/.ssh/config)
Birden fazla sunucuya bağlanıyorsanız veya özel ayarlarınız varsa, ~/.ssh/config dosyası işinizi büyük ölçüde kolaylaştırır. Bu dosya, her sunucu için takma adlar, özel anahtar yolları, farklı portlar ve kullanıcı adları gibi ayarları tanımlamanıza olanak tanır.
Örnek bir ~/.ssh/config dosyası:
Host sunucu1
HostName sunucu_ipadresi_veya_domain_1
User kullanici_adi_1
Port 22
IdentityFile ~/.ssh/id_ed25519
Host testserver
HostName 192.168.1.100
User devuser
Port 2222
IdentityFile ~/.ssh/test_key
ForwardAgent yes
Bu yapılandırma ile, sunucuya bağlanmak için sadece ssh sunucu1 veya ssh testserver yazmanız yeterli olacaktır. IdentityFile ile özel anahtarınızın yolunu belirtebilir, Port ile varsayılan 22 dışındaki portları kullanabilir ve ForwardAgent yes ile SSH agent’ı uzak sunucuya iletebilirsiniz (bastion host senaryoları için kullanışlıdır).
Ek Güvenlik Önlemleri ve İpuçları
SSH anahtarları güvenlik seviyesini artırsa da, bazı ek önlemlerle sunucunuzu ve bağlantılarınızı daha da güvende tutabilirsiniz:
1. Sunucuda Şifre Tabanlı Kimlik Doğrulamayı Devre Dışı Bırakma
Genel anahtarınızı sunucuya başarıyla kopyalayıp anahtarla bağlanabildiğinizden emin olduktan sonra, sunucunuzdaki şifre tabanlı kimlik doğrulamasını devre dışı bırakmanız şiddetle tavsiye edilir. Bu, sunucunuzu kaba kuvvet saldırılarına karşı korur.
Uzak sunucuda /etc/ssh/sshd_config dosyasını bir metin düzenleyici ile açın (örneğin, sudo nano /etc/ssh/sshd_config) ve aşağıdaki satırları bulun veya ekleyin:
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no # Eğer PasswordAuthentication devre dışı bırakılıyorsa bu da devre dışı bırakılabilir
Değişiklikleri kaydedin ve SSH servisini yeniden başlatın:
sudo systemctl restart sshd
Önemli: Bu değişikliği yapmadan önce SSH anahtarınızla sunucuya başarılı bir şekilde bağlanabildiğinizden kesinlikle emin olun. Aksi takdirde sunucunuza erişiminizi kaybedebilirsiniz.
2. Root Kullanıcısı ile SSH Erişimini Kısıtlama
Root kullanıcısı ile doğrudan SSH bağlantısı kurmak, güvenlik riski taşır. Bunun yerine, normal bir kullanıcı ile bağlanıp gerektiğinde sudo kullanmak daha güvenlidir. /etc/ssh/sshd_config dosyasında aşağıdaki satırı bulun veya ekleyin:
PermitRootLogin no
Değişiklikleri kaydedip SSH servisini yeniden başlatın.
3. Varsayılan SSH Portunu Değiştirme
SSH’in varsayılan portu olan 22, saldırganlar tarafından en çok hedeflenen portlardan biridir. Farklı bir port numarası (örneğin, 2222 veya 54321 gibi yüksek bir sayı) kullanarak otomatik saldırıların büyük bir kısmını engelleyebilirsiniz. /etc/ssh/sshd_config dosyasında aşağıdaki satırı bulun ve değiştirin:
#Port 22
Port 2222 # Yeni port numaranız
Değişiklikleri kaydettikten sonra SSH servisini yeniden başlatın ve güvenlik duvarınızda (firewall) yeni portu açmayı unutmayın (örneğin, sudo firewall-cmd --permanent --add-port=2222/tcp ve sudo firewall-cmd --reload).
4. Anahtarlarınızı Yedekleme
Özel anahtarınızı kaybetmek, ilgili sunuculara erişiminizi kaybetmenize neden olabilir. Bu nedenle, ~/.ssh dizininizi güvenli bir şekilde yedeklemek önemlidir. Şifreli bir USB sürücü veya güvenli bir bulut depolama hizmeti kullanabilirsiniz. Yedeklediğiniz özel anahtarın parolalı olduğundan emin olun.
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Rocky Linux 8 üzerinde SSH anahtarlarını nasıl oluşturacağınızı, genel anahtarınızı uzak sunucuya nasıl kopyalayacağınızı ve güvenli bir şekilde nasıl bağlantı kuracağınızı öğrendiniz. SSH anahtarları, şifre tabanlı kimlik doğrulamaya kıyasla hem daha güvenli hem de daha kullanışlı bir yöntem sunar. Anahtarlarınızı ve sunucu ayarlarınızı doğru bir şekilde yapılandırarak, uzak sunucularınıza erişim güvenliğinizi önemli ölçüde artırabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Anahtarımı kaybedersem ne olur?
Özel anahtarınızı kaybederseniz, o anahtarla yetkilendirilmiş sunuculara erişiminizi kaybedersiniz. Bu durumda, sunucuya farklı bir kimlik doğrulama yöntemiyle (örneğin, başka bir SSH anahtarı veya şifre tabanlı erişiminiz varsa) bağlanmanız, yeni bir anahtar çifti oluşturmanız ve yeni genel anahtarı sunucuya tekrar kopyalamanız gerekir. Eğer sunucuya başka bir şekilde erişemiyorsanız, sunucunun kurtarma modunu kullanmanız gerekebilir.
2. Parola (passphrase) belirlemek zorunlu mu?
Hayır, zorunlu değildir. Ancak özel anahtarınıza bir parola belirlemek, anahtarınızın çalınması durumunda ek bir güvenlik katmanı sağlar. Parolasız bir anahtar, ele geçirildiğinde direkt olarak kullanılabilir. Güvenlik için parola kullanmanız şiddetle tavsiye edilir.
3. Birden fazla sunucu için farklı anahtarlar kullanabilir miyim?
Evet, kesinlikle kullanabilirsiniz. Her sunucu için ayrı bir anahtar çifti oluşturmak iyi bir güvenlik uygulamasıdır. Bu sayede bir anahtarınızın güvenliği ihlal edilirse, diğer sunucularınızın güvenliği etkilenmez. ssh-keygen komutunu farklı bir dosya adı ile çalıştırarak (örneğin, ssh-keygen -f ~/.ssh/id_testserver -t ed25519) farklı anahtarlar oluşturabilir ve ~/.ssh/config dosyasında bu anahtarları her sunucuya özel olarak tanımlayabilirsiniz.
4. SSH anahtarlarımı nasıl yedeklerim?
~/.ssh dizinindeki özel anahtar dosyanızı (örneğin, id_ed25519) güvenli bir yere kopyalayarak yedekleyebilirsiniz. Bu yedekleme işlemi sırasında anahtar dosyasının şifreli (parolalı) olduğundan emin olun. USB sürücü, şifreli harici disk veya güvenli bulut depolama gibi yöntemler kullanabilirsiniz. Yedekleme sırasında izinlerin bozulmamasına dikkat edin.
5. “Permission denied (publickey)” hatasını nasıl çözerim?
Bu hata genellikle aşağıdaki nedenlerden birinden kaynaklanır:
- Yanlış Dosya İzinleri: Sunucudaki
~/.sshdizininin ve~/.ssh/authorized_keysdosyasının izinleri yanlış ayarlanmış olabilir.~/.sshiçin700,~/.ssh/authorized_keysiçin600izinleri olmalıdır. - Anahtar Kopyalanmamış: Genel anahtarınız sunucuya doğru bir şekilde kopyalanmamış veya
authorized_keysdosyasına eklenmemiş olabilir. - Yanlış Özel Anahtar: Bağlantı kurmaya çalıştığınızda SSH istemciniz doğru özel anahtarı bulamıyor olabilir.
ssh -i /path/to/your/private_key user@hostkomutuyla özel anahtarınızı açıkça belirtebilirsiniz. - SELinux/AppArmor Kısıtlamaları: Sunucuda SELinux veya AppArmor gibi güvenlik mekanizmaları SSH erişimini kısıtlıyor olabilir. Log dosyalarını kontrol edin.
Sorunu gidermek için sunucudaki /var/log/secure (veya benzeri) log dosyalarını kontrol etmek genellikle faydalıdır. Ayrıca, ssh -vvv user@host komutunu kullanarak detaylı hata ayıklama çıktısı alabilir ve sorunun kök nedenini belirleyebilirsiniz.