Linux Sunucularda SSH Anahtar Yönetimi ve Güvenli Erişim Rehberi
Linux Sunucularda SSH Anahtar Yönetimi ve Güvenli Erişim Rehberi
Son Güncelleme: Eylül 2026
SSH güvenliği, Linux sunuculara uzaktan erişimin en kritik yapı taşlarından biridir. Özellikle VPS, VDS, bulut sunucu ve kiralık sunucu ortamlarında doğru yapılandırılmamış SSH servisi; brute force saldırıları, yetkisiz erişim, zayıf parola kullanımı ve anahtar sızıntısı gibi ciddi risklere neden olabilir.
Bu rehberde SSH anahtar yönetimi, güvenli sshd_config ayarları, kullanıcı yetkilendirme politikaları, denetim yöntemleri ve pratik sorun giderme adımlarını detaylı şekilde ele alacağız. Amaç, hem yeni başlayan yöneticilere sağlam bir temel sunmak hem de üretim ortamında çalışan Linux sunucular için uygulanabilir bir güvenlik kontrol listesi oluşturmaktır.
İçindekiler
- SSH Güvenliği Nedir ve Neden Önemlidir?
- Anahtar Tabanlı Kimlik Doğrulama Nasıl Çalışır?
- Güvenli sshd_config Yapılandırması
- Kullanıcı, Grup ve Yetki Yönetimi
- SSH Port Forwarding ve Tünelleme Güvenliği
- SSH Erişimlerini İzleme ve Denetleme
- Yaygın SSH Sorunları ve Çözüm Yolları
- Üretim Sunucuları İçin SSH Güvenlik Kontrol Listesi
- Sıkça Sorulan Sorular
- Sonuç
SSH Güvenliği Nedir ve Neden Önemlidir?
SSH, yani Secure Shell, uzak sistemlere şifreli bağlantı kurmayı sağlayan bir ağ protokolüdür. Linux sunucularda komut satırı yönetimi, dosya transferi, otomasyon, yedekleme, dağıtım ve bakım işlemleri çoğunlukla SSH üzerinden yapılır. Bu nedenle SSH servisi, bir sunucunun yönetim kapısı olarak düşünülebilir.
Bir web sitesinin, veritabanının veya uygulama altyapısının güvenliği çoğu zaman SSH erişiminin ne kadar iyi korunduğuna bağlıdır. Zayıf parola kullanan, root kullanıcısıyla doğrudan girişe izin veren veya tüm IP adreslerinden sınırsız bağlantı kabul eden bir sunucu, saldırganlar için kolay hedef haline gelir.
Özellikle internete açık Sanal Sunucu, Türkiye VDS Sunucu veya Kiralık Sunucu altyapılarında SSH güvenliği, ilk kurulumdan itibaren planlanmalıdır. Çünkü SSH servisi genellikle 22 numaralı standart port üzerinden yayın yapar ve otomatik tarama botları bu portu sürekli kontrol eder.
SSH Tehdit Modeli
SSH güvenliğini doğru planlamak için saldırı yüzeyini anlamak gerekir. En sık karşılaşılan riskler şunlardır:
- Brute force saldırısı: Saldırganların otomatik araçlarla kullanıcı adı ve parola kombinasyonlarını denemesidir.
- Credential stuffing: Daha önce sızdırılmış parola listelerinin SSH girişlerinde denenmesidir.
- Root hesabının hedef alınması: Root kullanıcısı tüm Linux sistemlerde bilindiği için saldırganların ilk denediği hesaptır.
- Zayıf anahtar yönetimi: Parolasız özel anahtarların geliştirici bilgisayarlarında korunmadan saklanmasıdır.
- Yetki fazlalığı: Her kullanıcıya gereğinden fazla sudo veya shell yetkisi verilmesidir.
- Log takibinin yapılmaması: Başarısız giriş denemeleri ve şüpheli oturumların fark edilmemesidir.
Bu riskleri azaltmanın en etkili yolu, parola tabanlı girişi kapatmak, anahtar tabanlı kimlik doğrulama kullanmak, kullanıcıları sınırlandırmak, güvenlik duvarı ile erişim kaynaklarını daraltmak ve logları düzenli incelemektir.
Anahtar Tabanlı Kimlik Doğrulama Nasıl Çalışır?
Anahtar tabanlı kimlik doğrulama, parola yerine kriptografik anahtar çiftleriyle giriş yapılmasını sağlar. Bu yöntemde kullanıcı bilgisayarında bir özel anahtar ve sunucuda buna karşılık gelen açık anahtar bulunur. Özel anahtar hiçbir zaman sunucuya gönderilmez; kimlik doğrulama, şifreli matematiksel kanıtlama yöntemiyle gerçekleştirilir.
Bu yaklaşım, tahmin edilebilir parolalara göre çok daha güvenlidir. Ancak güvenlik seviyesi, anahtarın türüne, uzunluğuna, saklanma biçimine ve erişim politikalarına bağlıdır. Modern sistemlerde genellikle ed25519 anahtar tipi önerilir. Uyum gereksinimi olan eski sistemlerde ise güçlü bir RSA anahtarı kullanılabilir.
SSH Anahtarı Oluşturma
Yerel bilgisayarınızda güvenli bir SSH anahtarı oluşturmak için aşağıdaki komutu kullanabilirsiniz:
ssh-keygen -t ed25519 -a 100 -C 'admin@example.com'
Bu komutta -t ed25519 anahtar tipini, -a 100 anahtar türetme fonksiyonu tur sayısını, -C ise anahtarı tanımayı kolaylaştıran açıklama bilgisini ifade eder. Anahtar oluşturulurken mutlaka güçlü bir passphrase yani anahtar parolası belirlenmelidir. Böylece özel anahtar dosyası ele geçirilse bile doğrudan kullanılamaz.
Açık Anahtarı Sunucuya Kopyalama
Anahtarı sunucuya kopyalamak için ssh-copy-id komutundan yararlanabilirsiniz:
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu-ip-adresi
Bu işlem, açık anahtarı hedef kullanıcının ~/.ssh/authorized_keys dosyasına ekler. Eğer bu komut kullanılamıyorsa, açık anahtar manuel olarak da eklenebilir. Ancak manuel işlemde dosya izinleri doğru ayarlanmalıdır:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Anahtar Türleri Karşılaştırması
| Anahtar Türü | Kullanım Durumu | Avantaj | Dikkat Edilmesi Gerekenler |
|---|---|---|---|
ed25519 |
Modern Linux sunucular | Hızlı, güçlü ve kısa anahtar yapısı | Çok eski istemcilerde desteklenmeyebilir |
rsa |
Eski sistem uyumluluğu | Yaygın destek | En az 3072 veya 4096 bit tercih edilmelidir |
ecdsa |
Belirli uyumluluk senaryoları | Daha kısa anahtarlar | Kurumsal politikalara göre sınırlanabilir |
Üretim ortamlarında tek bir anahtarın tüm ekip tarafından paylaşılması doğru değildir. Her yönetici, geliştirici veya otomasyon sistemi için ayrı anahtar oluşturulmalı; erişim ihtiyacı sona erdiğinde ilgili açık anahtar authorized_keys dosyasından kaldırılmalıdır.
Güvenli sshd_config Yapılandırması
Linux sunucularda SSH daemon (arka plan servisi) yapılandırması genellikle /etc/ssh/sshd_config dosyası üzerinden yapılır. Bu dosyada yapılan hatalı bir düzenleme, SSH bağlantısının tamamen kesilmesine neden olabilir. Bu nedenle değişiklik yapmadan önce mevcut oturumunuzu kapatmamalı ve mümkünse konsol erişiminizi hazır bulundurmalısınız.
Önerilen Temel Ayarlar
Aşağıdaki örnek, güvenli bir başlangıç yapılandırması sağlar:
Port 22
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding no
AllowUsers deploy admin
LoginGraceTime 30
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
Bu ayarlarda en önemli satırlardan biri PermitRootLogin no değeridir. Root kullanıcısıyla doğrudan giriş kapatıldığında, yönetici önce normal bir kullanıcıyla bağlanır ve gerekli olduğunda sudo ile yetki yükseltir. Bu yaklaşım, hem saldırı yüzeyini azaltır hem de işlemlerin hangi kullanıcı tarafından yapıldığını loglarda daha net göstermeye yardımcı olur.
PasswordAuthentication no değeri ise parola tabanlı girişi kapatır. Ancak bu ayarı etkinleştirmeden önce anahtar tabanlı girişin çalıştığından emin olunmalıdır. Aksi halde sunucuya erişiminizi kaybedebilirsiniz.
SSH Servisini Yeniden Yükleme
Yapılandırma değişikliğinden sonra dosyanın sözdizimini test etmek önemlidir:
sshd -t
Komut hata döndürmüyorsa SSH servisini yeniden yükleyebilirsiniz:
systemctl reload sshd
Bazı Ubuntu ve Debian sistemlerinde servis adı ssh olabilir:
systemctl reload ssh
Port Değiştirmek Gerekli mi?
SSH portunu 22 dışında bir değere taşımak, tek başına gerçek bir güvenlik önlemi değildir; daha çok otomatik tarama gürültüsünü azaltır. Buna security by obscurity yani gizliliğe dayalı güvenlik yaklaşımı denir. Port değişikliği; anahtar doğrulama, root girişini kapatma, güvenlik duvarı, log izleme ve erişim kısıtlamalarıyla birlikte düşünülmelidir.
Eğer port değiştirecekseniz önce güvenlik duvarında yeni porta izin verin, ardından sshd_config içindeki Port satırını güncelleyin. Mevcut SSH oturumunu kapatmadan yeni terminalden bağlantıyı test etmek güvenli bir yöntemdir.
Kullanıcı, Grup ve Yetki Yönetimi
SSH güvenliğinde yalnızca bağlantı yöntemi değil, kullanıcıların sistemde ne yapabildiği de önemlidir. Bir kullanıcının sunucuya giriş yapabilmesi, mutlaka tüm sistem üzerinde yönetici yetkisine sahip olması gerektiği anlamına gelmez. En az ayrıcalık prensibi, her kullanıcıya sadece işini yapması için gerekli izinlerin verilmesini ifade eder.
Yeni Yönetici Kullanıcısı Oluşturma
Root yerine kullanılacak bir yönetici hesabı oluşturmak için aşağıdaki komutlar kullanılabilir:
adduser admin
usermod -aG sudo admin
CentOS, AlmaLinux veya Rocky Linux tabanlı sistemlerde yönetici grubu genellikle wheel olarak kullanılır:
usermod -aG wheel admin
Bu kullanıcı için açık anahtar ekledikten sonra root girişini kapatmak daha güvenli hale gelir. Eğer ekipte birden fazla kişi varsa, herkes için ayrı kullanıcı hesabı açılması tavsiye edilir. Ortak kullanıcı hesapları, denetim ve olay analizi süreçlerini zorlaştırır.
AllowUsers ve AllowGroups Kullanımı
AllowUsers direktifi, SSH ile bağlanabilecek kullanıcıları sınırlar. Örneğin yalnızca admin ve deploy kullanıcılarına izin vermek için şu satır kullanılabilir:
AllowUsers admin deploy
Daha ölçeklenebilir bir yöntem olarak AllowGroups kullanılabilir. Önce özel bir grup oluşturulur, ardından sadece bu gruptaki kullanıcıların SSH erişimine izin verilir:
groupadd ssh-users
usermod -aG ssh-users admin
usermod -aG ssh-users deploy
AllowGroups ssh-users
Sudo Yetkilerini Sınırlandırma
Her SSH kullanıcısına tam sudo yetkisi vermek risklidir. Örneğin yalnızca uygulama dağıtımı yapacak bir kullanıcıya servis yeniden başlatma ve belirli dizinlere yazma yetkisi verilebilir. Bu tür sınırlamalar visudo ile güvenli şekilde düzenlenmelidir:
visudo
Örnek sınırlı yetki tanımı:
deploy ALL=(root) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl restart php-fpm
Bu yaklaşım, özellikle Laravel, WordPress, özel PHP uygulamaları veya kurumsal web servisleri barındıran Linux Hosting ve sunucu ortamlarında hatalı veya kötü niyetli komutların etkisini azaltır.
SSH Port Forwarding ve Tünelleme Güvenliği
SSH yalnızca uzak kabuk erişimi için değil, aynı zamanda güvenli tünelleme için de kullanılır. Port forwarding, yerel veya uzak bir portun SSH üzerinden başka bir servise yönlendirilmesidir. Bu özellik doğru kullanıldığında güvenli yönetim sağlar; yanlış kullanıldığında ise ağ politikalarını atlatan bir arka kapıya dönüşebilir.
Yerel Port Yönlendirme
Örneğin yalnızca sunucu içinden erişilebilen bir veritabanına kendi bilgisayarınızdan güvenli şekilde bağlanmak için şu komut kullanılabilir:
ssh -L 3307:127.0.0.1:3306 admin@sunucu-ip-adresi
Bu komut, yerel bilgisayarınızdaki 3307 portunu sunucudaki 127.0.0.1:3306 adresine tüneller. Böylece MySQL veya MariaDB servisini internete açmadan güvenli erişim sağlanabilir.
Uzak Port Yönlendirme Riski
RemoteForward özelliği, sunucu üzerinden dışarıya doğru tünel açılmasına izin verebilir. Geliştirme ortamlarında faydalı olsa da üretim sunucularında dikkatli kullanılmalıdır. Gerekmiyorsa sshd_config içinde aşağıdaki ayarlar tercih edilebilir:
AllowTcpForwarding no
GatewayPorts no
PermitTunnel no
Ancak bazı yedekleme, otomasyon veya özel yönetim senaryolarında port yönlendirme gerekebilir. Bu durumda genel kapatma yerine kullanıcı bazlı kısıtlama yapılması daha doğru olabilir. Kritik veritabanı, yönetim paneli ve iç servislerin dış dünyaya tünellenmesini önlemek için düzenli denetim yapılmalıdır.
SSH Erişimlerini İzleme ve Denetleme
Güvenli yapılandırma kadar önemli olan bir diğer konu da izleme ve denetim süreçleridir. SSH logları, başarısız giriş denemelerini, başarılı oturumları, kullanılan kullanıcı adlarını ve bağlantı IP adreslerini görmenizi sağlar. Bu kayıtlar, saldırı tespiti ve olay sonrası analiz için kritik değerdedir.
SSH Loglarını İnceleme
Ubuntu ve Debian tabanlı sistemlerde SSH girişleri çoğunlukla /var/log/auth.log dosyasında tutulur:
tail -f /var/log/auth.log
RHEL, CentOS, AlmaLinux ve Rocky Linux sistemlerinde ise genellikle /var/log/secure dosyası kullanılır:
tail -f /var/log/secure
Systemd kullanan sistemlerde journalctl ile SSH servis logları izlenebilir:
journalctl -u ssh -f
veya:
journalctl -u sshd -f
Başarılı ve Başarısız Girişleri Ayırma
Başarısız giriş denemelerini görmek için:
grep 'Failed password' /var/log/auth.log
Başarılı girişleri görmek için:
grep 'Accepted' /var/log/auth.log
Bu komutlar düzenli olarak incelendiğinde olağan dışı IP adresleri, bilinmeyen kullanıcı adları veya yoğun deneme yapılan zaman aralıkları fark edilebilir. Daha gelişmiş ortamlarda bu loglar merkezi log yönetimi sistemlerine aktarılmalı ve alarm kuralları oluşturulmalıdır.
Yedekleme ve Kurtarma Planı
SSH yapılandırma dosyaları, kullanıcı anahtarları ve kritik sistem ayarları düzenli olarak yedeklenmelidir. Yanlış bir değişiklik sonrası erişim kaybı yaşandığında güncel yedekler kurtarma süresini önemli ölçüde kısaltır. Bu amaçla Yedekleme Hizmeti gibi düzenli ve yönetilebilir çözümler, üretim ortamları için önemli bir tamamlayıcı güvenlik katmanıdır.
Yaygın SSH Sorunları ve Çözüm Yolları
SSH güvenliğini artırırken zaman zaman bağlantı hatalarıyla karşılaşabilirsiniz. Bu hataların büyük bölümü yanlış dosya izinleri, eksik anahtar, hatalı kullanıcı adı, kapalı port veya yanlış servis adı gibi nedenlerden kaynaklanır.
Permission Denied Hatası
Permission denied (publickey) hatası, sunucunun gönderilen anahtarı kabul etmediğini gösterir. Kontrol edilmesi gereken başlıca noktalar şunlardır:
- Doğru kullanıcı: Bağlandığınız kullanıcı adının sunucuda var olduğundan emin olun.
- Yetkili anahtar dosyası: Açık anahtarın ilgili kullanıcının
~/.ssh/authorized_keysdosyasında bulunduğunu kontrol edin. - Dosya izinleri:
~/.sshdizini700,authorized_keysdosyası600olmalıdır. - Ev dizini sahibi: Kullanıcının ev dizini ve
.sshklasörü doğru kullanıcıya ait olmalıdır.
İzinleri düzeltmek için:
chown -R kullanici:kullanici /home/kullanici/.ssh
chmod 700 /home/kullanici/.ssh
chmod 600 /home/kullanici/.ssh/authorized_keys
Connection Refused Hatası
Connection refused hatası, SSH servisinin ilgili portta dinlemediğini veya güvenlik duvarının bağlantıyı engellediğini gösterebilir. Servis durumunu kontrol etmek için:
systemctl status ssh
systemctl status sshd
Dinlenen portları görmek için:
ss -tlnp | grep ssh
Yeni Ayardan Sonra Erişim Kaybı
SSH yapılandırması değiştirildikten sonra bağlantı kesildiyse, sağlayıcınızın konsol erişimi veya kurtarma modu kullanılmalıdır. Bu nedenle önemli değişikliklerden önce her zaman iki ayrı SSH oturumu açmak, yapılandırma dosyasını yedeklemek ve sshd -t komutuyla test yapmak gerekir.
Üretim Sunucuları İçin SSH Güvenlik Kontrol Listesi
Aşağıdaki kontrol listesi, yeni kurulan veya mevcut üretim sunucularında SSH güvenliğini değerlendirmek için kullanılabilir. Liste, tek seferlik bir kurulum adımı olarak değil, düzenli bakım sürecinin parçası olarak ele alınmalıdır.
| Kontrol | Önerilen Durum | Açıklama |
|---|---|---|
| Root SSH girişi | Kapalı | PermitRootLogin no kullanılmalıdır. |
| Parola ile giriş | Kapalı | Anahtar doğrulama test edildikten sonra kapatılmalıdır. |
| Anahtar parolası | Zorunlu | Özel anahtarlar güçlü passphrase ile korunmalıdır. |
| Kullanıcı sınırlandırma | Aktif | AllowUsers veya AllowGroups tercih edilmelidir. |
| Log izleme | Düzenli | Başarısız girişler ve olağan dışı IP adresleri takip edilmelidir. |
| Yedekleme | Aktif | SSH yapılandırması ve kullanıcı anahtarları güvenli şekilde yedeklenmelidir. |
- Kurulum sonrası ilk adım: Root dışında bir yönetici kullanıcısı oluşturun ve SSH anahtarını ekleyin.
- İkinci adım: Anahtar ile girişin çalıştığını farklı bir terminal oturumunda test edin.
- Üçüncü adım: Parola tabanlı girişi ve root ile doğrudan girişi kapatın.
- Dördüncü adım: Güvenlik duvarında yalnızca gerekli IP adreslerine veya portlara izin verin.
- Beşinci adım: Logları düzenli takip edin ve şüpheli girişler için alarm mekanizması kurun.
Kurumsal veya yüksek trafikli projelerde SSH güvenliği, sunucu seçimiyle birlikte planlanmalıdır. Örneğin coğrafi konum, ağ gecikmesi ve erişim politikaları önemliyse Türkiye Kiralık Sunucu veya Bulut Sunucu seçenekleri operasyonel yönetimi kolaylaştırabilir.
Sıkça Sorulan Sorular
SSH portunu değiştirmek sunucuyu tamamen güvenli yapar mı?
Hayır. SSH portunu değiştirmek yalnızca otomatik tarama denemelerini azaltabilir. Asıl güvenlik; anahtar tabanlı giriş, root erişiminin kapatılması, parola girişinin devre dışı bırakılması, güvenlik duvarı kısıtlamaları ve düzenli log takibiyle sağlanır.
Parola ile SSH girişi tamamen kapatılmalı mı?
Üretim sunucularında genellikle evet. Ancak kapatmadan önce anahtar tabanlı girişin sorunsuz çalıştığından emin olunmalıdır. Aksi halde sunucuya erişiminizi kaybedebilirsiniz. Geçiş sürecinde mevcut oturumu açık tutarak yeni ayarları test etmek en güvenli yöntemdir.
Birden fazla yönetici aynı SSH anahtarını kullanabilir mi?
Teknik olarak kullanabilir, fakat güvenlik açısından önerilmez. Her kullanıcının ayrı anahtarı ve mümkünse ayrı sistem hesabı olmalıdır. Böylece erişim iptali, log analizi ve yetki yönetimi daha kontrollü yapılır.
SSH özel anahtarımı nerede saklamalıyım?
Özel anahtar, yalnızca güvenilir cihazlarda saklanmalı ve güçlü bir passphrase ile korunmalıdır. Anahtar dosyası e-posta, mesajlaşma uygulaması veya ortak dosya paylaşımı üzerinden gönderilmemelidir. Mümkünse donanımsal güvenlik anahtarları veya şifreli parola yöneticileri tercih edilmelidir.
SSH erişimini sadece belirli IP adresleriyle sınırlamak mantıklı mı?
Evet. Sabit ofis IP adresi, VPN çıkış IP adresi veya yönetim ağı kullanılıyorsa SSH erişimini bu kaynaklarla sınırlamak saldırı yüzeyini ciddi şekilde azaltır. Ancak IP değişikliği durumunda erişim kaybı yaşamamak için alternatif konsol veya kurtarma erişimi planlanmalıdır.
SSH anahtarımı kaybedersem ne olur?
Eğer sunucuda başka bir yönetici erişimi, panel konsolu veya kurtarma modu yoksa erişim zorlaşabilir. Bu nedenle yedek yönetici hesabı, güvenli anahtar yedekleme prosedürü ve sağlayıcı konsol erişimi önceden planlanmalıdır.
SSH güvenliği web sitesi güvenliğini etkiler mi?
Evet. Saldırgan SSH üzerinden sunucuya erişirse web dosyalarını değiştirebilir, veritabanı bilgilerine ulaşabilir, zararlı yazılım yerleştirebilir veya servisleri durdurabilir. Bu nedenle SSH güvenliği, SSL, yedekleme, güvenlik duvarı ve uygulama güncellemeleriyle birlikte düşünülmelidir.
Sonuç
Linux sunucularda SSH güvenliği, yalnızca birkaç satırlık yapılandırma değişikliğinden ibaret değildir. Güvenli bir SSH politikası; anahtar tabanlı kimlik doğrulama, root girişinin kapatılması, parola girişinin sınırlandırılması, kullanıcı yetkilerinin doğru yönetilmesi, port yönlendirme kontrolleri, log izleme ve düzenli yedekleme adımlarının birlikte uygulanmasıyla oluşur.
Yeni bir sunucu kurarken ilk yapılacak işlemlerden biri SSH erişimini güvenli hale getirmek olmalıdır. Mevcut sunucularda ise periyodik denetimlerle eski kullanıcılar, kullanılmayan anahtarlar, hatalı sudo yetkileri ve şüpheli giriş kayıtları kontrol edilmelidir. Bu yaklaşım, hem bireysel projelerde hem de kurumsal web uygulamalarında kesinti, veri kaybı ve yetkisiz erişim riskini azaltır.
Corelux altyapısında ihtiyacınıza göre Türkiye VPS Sunucu, Almanya VDS Sunucu, Hosting ve SSL Sertifikası çözümlerini değerlendirebilir; SSH güvenliği, yedekleme ve sunucu yönetimi süreçlerinizi daha sağlam bir temel üzerine kurabilirsiniz.
Yazar
Boran BAR