Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
SSH anahtarı ile sunucuya parola yerine kriptografik bir anahtar çiftiyle bağlanırsınız. Parola tahmin saldırılarına karşı çok daha dayanıklıdır ve otomasyon için de uygundur. Bu rehberde modern ve önerilen ed25519 algoritmasıyla anahtar oluşturacak, sunucuya ekleyecek, ssh-agent ile kullanımını kolaylaştıracak ve authorized_keys dosyasını yöneteceğiz.
Hedef kitle VPS ve sunucu yöneticileridir. İşlem yaklaşık 15-20 dakika sürer. Sonunda isteğe bağlı olarak parola ile girişi kapatmayı da anlatıyoruz; bu adım erişimi etkileyebileceği için ikinci bir oturum açık tutarak ilerleyeceğiz.
Gereksinimler
- Anahtarı oluşturacağınız bilgisayarda OpenSSH istemcisi (Linux, macOS ve güncel Windows 10/11'de yerleşik gelir)
- Bağlanacağınız sunucuda mevcut bir kullanıcı ve ilk bağlantı için parola ya da konsol erişimi
- Sunucuda root veya sudo yetkisi (parolayla girişi kapatmak için)
- Anahtarınız için güçlü bir parola (passphrase) belirlemeye hazır olmak
Adım adım SSH anahtarı oluşturma ve yönetimi
1. ed25519 anahtar çifti oluşturun
Anahtarı kendi bilgisayarınızda üretin, sunucuda değil. -a 100 parolanın anahtar türetme tur sayısını artırarak kaba kuvvet saldırılarını zorlaştırır. -C ile anahtara tanımlayıcı bir yorum ekleyebilirsiniz.
ssh-keygen -t ed25519 -a 100 -C 'ad-soyad@is-bilgisayari'Komut dosya yolunu sorduğunda varsayılanı (~/.ssh/id_ed25519) kabul edebilirsiniz. Ardından parola belirleyin. Bu işlem iki dosya üretir: id_ed25519 özel anahtardır ve kimseyle paylaşılmaz; id_ed25519.pub ortak anahtardır ve sunuculara eklenir. Farklı projeler için ayrı anahtarlar kullanmak istiyorsanız -f ~/.ssh/proje_anahtari ile ayrı dosya adı verin.
2. Dosya izinlerini kontrol edin
OpenSSH, özel anahtarın başkaları tarafından okunabilir olmasına izin vermez. Linux ve macOS'ta izinlerin şu şekilde olduğundan emin olun.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
ls -l ~/.ssh3. Ortak anahtarı sunucuya ekleyin
En kolay yol ssh-copy-id komutudur; sunucuya parola ile bir kez bağlanır ve anahtarı doğru yere ekler. kullanici ve SUNUCU_IP değerlerini kendi bilgilerinizle değiştirin.
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@SUNUCU_IPssh-copy-id yoksa (örneğin Windows PowerShell'de) ortak anahtarı elle ekleyebilirsiniz. Önce ortak anahtarı görüntüleyip kopyalayın, sonra sunucuda dosyaya ekleyin.
cat ~/.ssh/id_ed25519.pub# Sunucuda, ilgili kullanıcı olarak
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysDosyaya her anahtarı tek satır olarak yapıştırın. Satır kırılırsa anahtar geçersiz olur.
4. Anahtarla bağlanmayı deneyin
ssh -i ~/.ssh/id_ed25519 kullanici@SUNUCU_IPAnahtarınız için belirlediğiniz parola istenir (sunucu parolası değil). Başarıyla giriş yaptıysanız anahtar doğru çalışıyor demektir.
5. ssh-agent ile parolayı bir kez girin
Her bağlantıda parola yazmamak için ssh-agent anahtarı bellekte tutar. Linux ve macOS'ta aşağıdaki komutlar ajanı başlatır ve anahtarı ekler. Windows'ta OpenSSH Authentication Agent servisini çalıştırıp aynı ssh-add komutunu kullanabilirsiniz.
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_ed25519
ssh-add -lssh-add -l yüklenen anahtarların parmak izlerini listeler. Ajan yönlendirmesini (agent forwarding) yalnızca güvendiğiniz sunuculara açın; ele geçirilmiş bir sunucu ajanınızı kullanabilir. Ajanı kapatmak için ssh-agent -k kullanılır.
6. İstemci yapılandırma dosyası ile kısaltma tanımlayın
Birden çok sunucunuz varsa ~/.ssh/config dosyasıyla kısa adlar tanımlayabilirsiniz. Böylece her seferinde IP, kullanıcı ve anahtar yazmanız gerekmez.
Host vps1
HostName SUNUCU_IP
User kullanici
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yesArtık yalnızca ssh vps1 yazmanız yeterli olur.
7. authorized_keys dosyasını yönetin
Bir anahtarın erişimini kaldırmak için ilgili satırı ~/.ssh/authorized_keys dosyasından silmeniz yeterlidir. Hangi satırın hangi anahtara ait olduğunu parmak izi ile eşleştirebilirsiniz.
ssh-keygen -lf ~/.ssh/id_ed25519.pub
ssh-keygen -lf ~/.ssh/authorized_keysBir anahtarı belirli bir IP adresiyle sınırlamak için satırın başına seçenek ekleyebilirsiniz. Örnek (anahtarın gerisini kısaltılmış olarak gösteriyoruz):
from="203.0.113.5",no-agent-forwarding ssh-ed25519 AAAA... ad-soyad@is-bilgisayariSeçenek değerleri authorized_keys içinde mutlaka çift tırnakla yazılır; tek tırnak geçersizdir ve anahtar satırı reddedilir.
8. İsteğe bağlı: parola ile girişi kapatın
Anahtarla girişin çalıştığını doğruladıktan sonra parola doğrulamasını kapatmak brute-force saldırılarını büyük ölçüde keser. Uyarı: Bu adım hatalı yapılırsa sunucuya erişiminizi kaybedebilirsiniz. Mevcut oturumunuzu kapatmayın, yeni bir terminalde test edin ve konsol erişiminizin olduğundan emin olun. OpenSSH ilk eşleşen değeri kullandığı için ayarı 01- önekli bir drop-in dosyasında yapın.
sudo nano /etc/ssh/sshd_config.d/01-anahtar-girisi.confPasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yessudo sshd -t
sudo systemctl reload ssh # Debian / Ubuntu
sudo systemctl reload sshd # AlmaLinux / RockyYeni bir terminal açıp anahtarla bağlanabildiğinizi doğrulayın; mevcut oturumu ancak bundan sonra kapatın. Ana yapılandırma dosyasında Include satırının bulunduğundan emin olmak için sudo sshd -T | grep -i passwordauthentication çıktısını kontrol edin; AlmaLinux/Rocky 8'de bu Include satırı yoktur, ayarı doğrudan /etc/ssh/sshd_config içinde yapın.
Doğrulama
Anahtar tabanlı girişin gerçekten kullanıldığını ayrıntılı çıktıyla görebilirsiniz.
ssh -v kullanici@SUNUCU_IP exit 2>&1 | grep -i -E 'Offering public key|Authentication succeeded'
ssh-add -l
sudo sshd -T | grep -i -E 'passwordauthentication|pubkeyauthentication'
ssh -o PubkeyAuthentication=no -o PreferredAuthentications=password kullanici@SUNUCU_IPBeklenen sonuç: Offering public key ve Authentication succeeded (publickey) satırları. Parolayla girişi kapattıysanız passwordauthentication no görünmeli ve son komut, yani anahtarsız deneme, Permission denied (publickey) ile reddedilmelidir.
Sık karşılaşılan sorunlar
- Permission denied (publickey): Sunucuda
~/.sshiçin 700,authorized_keysiçin 600 izni, dosya sahibinin ilgili kullanıcı olması gerekir. Ev dizininin başkaları tarafından yazılabilir olmaması da şarttır. - Anahtar satırı geçersiz sayılıyor: Satır bölünmüş veya fazladan boşluk içeriyordur. Anahtar tek satırda olmalıdır.
- Windows'ta 'UNPROTECTED PRIVATE KEY FILE' uyarısı: Dosya izinleri geniştir. Özel anahtar dosyasının izinlerini yalnızca kendi kullanıcınıza verin.
- Yanlış anahtar sunuluyor: Ajanda çok sayıda anahtar varsa sunucu çok sayıda başarısız deneme nedeniyle reddedebilir.
IdentitiesOnly yesveIdentityFilekullanın. - SELinux (RHEL) anahtarı okutmuyor:
restorecon -R -v ~/.sshkomutuyla bağlamı düzeltin.
Güvenlik ve bakım notları
- Özel anahtarı hiçbir koşulda paylaşmayın, e-postayla göndermeyin ve depolara eklemeyin.
- Anahtarı güçlü bir parola ile koruyun; böylece bilgisayarınızın çalınması durumunda anahtar tek başına işe yaramaz.
- Çalışanlar ayrıldığında veya cihaz kaybolduğunda ilgili ortak anahtarı tüm sunuculardaki
authorized_keysdosyalarından kaldırın. - Her cihaz ve proje için ayrı anahtar kullanın; bir anahtar ele geçirilirse kapsam sınırlı kalır.
- Anahtarları periyodik olarak gözden geçirip kullanılmayanları temizleyin.
- Parola doğrulamasını kapatmadan önce fail2ban gibi bir koruma ve konsol erişimi planlayın.
Sık sorulan sorular
RSA yerine neden ed25519 öneriliyor?
ed25519 daha kısa anahtarlarla güçlü güvenlik sağlar, üretimi ve doğrulaması hızlıdır. Modern OpenSSH sürümlerinin tamamı destekler. Çok eski sistemlerle uyum gerekirse en az 3072 bit RSA kullanılabilir.
Anahtarıma parola koymak şart mı?
Zorunlu değildir ama önerilir. Parolasız anahtar bilgisayarınızdan çalınırsa doğrudan kullanılabilir. ssh-agent sayesinde parolayı her bağlantıda yazmanız gerekmez.
Özel anahtarımı kaybedersem ne yapmalıyım?
Sunucuya parolayla veya konsoldan erişip yeni bir ortak anahtar ekleyin ve eskisini authorized_keys içinden silin. Bu yüzden parolayla girişi kapatmadan önce konsol erişimi gibi bir yedek yol bırakmanız önemlidir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- rsync ile sunucu taşıma: VPS’ten VPS’e geçişrsync ile VPS’ten VPS’e güvenli geçiş: ilk senkronizasyon, veritabanı dökümü, son eşitleme, DNS geçişi ve doğrulama adımlarını kesintiyi en aza indirerek uygulayın.
- Cron ve systemd timer ile zamanlanmış görevlerLinux sunucuda zamanlanmış görev kurun: cron söz dizimi, kilit ve günlükleme, systemd timer ve service çifti, OnCalendar ve Persistent ile güvenilir zamanlama.
- VPS’e LEMP yığını kurulumu (Nginx, MariaDB, PHP-FPM)Boş bir VPS’e LEMP yığınını kurun: Nginx, MariaDB ve PHP-FPM kurulumu, sunucu bloğu, veritabanı oluşturma, güvenlik duvarı ve test. Debian, Ubuntu, AlmaLinux ve Rocky için.
- restic ile VPS yedeklemerestic ile VPS’inizi şifreli, artımlı ve tekilleştirilmiş şekilde yedekleyin: depo oluşturma, otomasyon, saklama politikası ve geri yükleme adımlarını öğrenin.