SSH Bağlantı Sorunları: En Sık Karşılaşılan Problemler ve Pratik Çözümler
SSH bağlantı sorunlarını teşhis etmek ve çözmek için adım adım rehber. Port kapalı, kimlik doğrulama hataları, firewall engelleri ve diğer yaygın problemlerin çözümüne odaklanıyoruz.
Caner Serbest
Sistem ve Altyapı
7 dk okuma
SSH Bağlantı Sorunları: En Sık Karşılaşılan Problemler ve Pratik Çözümler
Merhaba! Bugün sizlerle SSH bağlantı sorunları konusunda sık karşılaşılan problemleri ve bu problemlerin nasıl çözüleceğini detaylı bir şekilde inceleyeceğiz. SSH (Secure Shell), uzak sunuculara güvenli bir şekilde erişim sağlamak için kullanılan temel bir protokoldür. Ancak, bazen bağlantı kurulamadığı, kimlik doğrulama hataları alındığı veya bağlantı aniden kesildiği durumlarla karşılaşabilirsiniz. Bu rehberde, bu tür sorunların nasıl teşhis edileceğini, çözümleneceğini ve gelecekte önlenebileceğini adım adım ele alacağız.
🔍 SSH Bağlantı Sorunlarının Temel Nedenleri
SSH bağlantı sorunları genellikle aşağıdaki kategorilere ayrılabilir:
-
Ağ ve Bağlantı Problemleri
- Sunucunun kapalı olması
- Ağ bağlantısının kesilmesi
- Portun kapalı olması (varsayılan olarak 22)
- Firewall (güvenlik duvarı) engelleri
- DNS sorunları
-
Kimlik Doğrulama Hataları
- Yanlış kullanıcı adı/şifre
- SSH anahtarlarının yanlış yapılandırılması
authorized_keysdosyasının yanlış izinleri- SELinux veya AppArmor gibi güvenlik mekanizmalarının engellemesi
-
SSH Servisinin Çalışmaması
- SSH servisinin durmuş olması
- Yanlış yapılandırılmış
sshd_configdosyası - Port çakışması
-
Sistem Kaynakları ve Performans Problemleri
- Yüksek CPU veya bellek kullanımı
- Disk doluluğu
- Ağ bant genişliğinin yetersiz olması
🛠️ Adım Adım SSH Bağlantı Sorunlarını Çözme
1. Temel Kontroller: Bağlantıyı Doğrulama
Bağlantı sorununu teşhis etmek için ilk adım, temel kontrolleri yapmaktır. Bunun için aşağıdaki komutları kullanabilirsiniz:
# Sunucunun açık olup olmadığını kontrol edin
ping <sunucu_ip_veya_hostname>
# SSH portunun açık olup olmadığını kontrol edin (varsayılan port: 22)
telnet <sunucu_ip> 22
# veya
nc -zv <sunucu_ip> 22
# Alternatif olarak, nmap kullanabilirsiniz
nmap -p 22 <sunucu_ip>
Çıktı Örnekleri:
pingkomutu yanıt vermiyorsa, sunucu kapalı olabilir veya ağda bir sorun vardır.telnetveyanckomutu bağlantıyı reddederse, port kapalı olabilir veya firewall engellemesi vardır.nmapçıktısında port22kapalı olarak görünüyorsa, SSH servisi çalışmıyor olabilir.
2. SSH Servisinin Durumunu Kontrol Etme
SSH servisinin çalışıp çalışmadığını kontrol etmek için sistem servis yöneticisini kullanabilirsiniz:
# Systemd kullanılan sistemlerde (Ubuntu, Debian, CentOS 7+)
sudo systemctl status ssh
# SysVinit kullanılan sistemlerde (eski Debian/Ubuntu)
sudo service ssh status
# SSH servisini yeniden başlatma
sudo systemctl restart ssh
Çıktı Örnekleri:
active (running): SSH servisi çalışıyor.inactive (dead): SSH servisi durmuş.failed: SSH servisi çalışmaya çalışırken hata aldı.
Eğer servis durmuşsa, aşağıdaki komutla yeniden başlatabilirsiniz:
sudo systemctl restart ssh
3. SSH Yapılandırma Dosyasını Kontrol Etme
SSH servisinin yapılandırma dosyası /etc/ssh/sshd_config konumundadır. Bu dosyada yapılan hatalı ayarlar bağlantı sorunlarına neden olabilir. Dosyayı incelemek için:
sudo nano /etc/ssh/sshd_config
Önemli parametreler:
Port 22: SSH portunu belirler. Varsayılan olarak 22’dir. Farklı bir port kullanıyorsanız, bağlantı sırasında bu portu belirtmelisiniz.PermitRootLogin: Root kullanıcısının SSH üzerinden girişine izin verir. Güvenlik nedeniylenoolarak ayarlanması önerilir.PasswordAuthentication: Şifre ile girişe izin verir.yesolarak ayarlanmalıdır.PubkeyAuthentication: SSH anahtarları ile girişe izin verir.yesolarak ayarlanmalıdır.AllowUsers: Belirli kullanıcıların girişine izin verir. Örneğin:AllowUsers caner serbest
Değişiklik yaptıktan sonra SSH servisini yeniden başlatmayı unutmayın:
sudo systemctl restart ssh
4. SSH Anahtarları ile Kimlik Doğrulama Problemleri
SSH anahtarları kullanarak kimlik doğrulama yaparken karşılaşılan yaygın problemler şunlardır:
a. Anahtarların Yanlış Yerleştirilmesi
- Kullanıcının
~/.ssh/authorized_keysdosyasına anahtar eklenmemiş olabilir. authorized_keysdosyasının izinleri yanlış olabilir.
Çözüm:
# authorized_keys dosyasının izinlerini kontrol edin
ls -la ~/.ssh/authorized_keys
# Doğru izinler şu şekilde olmalıdır:
# -rw------- (600)
chmod 600 ~/.ssh/authorized_keys
# authorized_keys dosyasının sahibini kontrol edin
chown $USER:$USER ~/.ssh/authorized_keys
b. SSH Anahtarlarının Yanlış Oluşturulması
Anahtar oluştururken aşağıdaki komutu kullanabilirsiniz:
ssh-keygen -t ed25519 -C "[email protected]"
Anahtar oluşturulduktan sonra, public anahtarı (id_ed25519.pub) sunucuya eklemelisiniz:
# Public anahtarı sunucuya kopyalayın
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu_ip
# Alternatif olarak, elle ekleyebilirsiniz
cat ~/.ssh/id_ed25519.pub | ssh kullanici@sunucu_ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
c. SSH Config Dosyasının Yanlış Yapılandırılması
Kullanıcı özelinde SSH ayarları yapmak için ~/.ssh/config dosyasını kullanabilirsiniz:
nano ~/.ssh/config
Örnek yapılandırma:
Host myserver
HostName sunucu_ip
User caner
Port 22
IdentityFile ~/.ssh/id_ed25519
Bu şekilde, ssh myserver komutunu kullanarak kolayca bağlantı kurabilirsiniz.
5. Firewall ve Güvenlik Duvarı Engelleri
Firewall (UFW, iptables, firewalld) SSH portunu engelliyor olabilir. Aşağıdaki komutlarla firewall kurallarını kontrol edin:
UFW (Ubuntu/Debian)
# UFW durumunu kontrol edin
sudo ufw status
# SSH portunu açın
sudo ufw allow 22/tcp
# UFW'yi yeniden yükleyin
sudo ufw reload
iptables (Tüm Linux Dağıtımları)
# iptables kurallarını listeleyin
sudo iptables -L -n -v
# SSH portunu açın (varsayılan port: 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Kuralları kaydedin (iptables-persistent paketi gereklidir)
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
firewalld (RHEL/CentOS/Fedora)
# firewalld durumunu kontrol edin
sudo firewall-cmd --state
# SSH servisini ekleyin
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
6. SELinux ve AppArmor Engelleri
SELinux (RHEL/CentOS) veya AppArmor (Ubuntu/Debian) gibi güvenlik mekanizmaları SSH bağlantısını engelleyebilir. Kontrol etmek için:
SELinux
# SELinux durumunu kontrol edin
sestatus
# SELinux loglarını kontrol edin
sudo grep sshd /var/log/audit/audit.log | audit2why
# SELinux izinlerini geçici olarak değiştirin (sadece test amaçlı)
sudo setenforce 0
# SELinux izinlerini kalıcı olarak değiştirin
echo "SELINUX=permissive" | sudo tee -a /etc/selinux/config
AppArmor
# AppArmor durumunu kontrol edin
sudo apparmor_status
# SSH profili durumunu kontrol edin
sudo aa-status | grep ssh
# SSH profilini geçici olarak devre dışı bırakın (sadece test amaçlı)
sudo systemctl stop apparmor
7. SSH Bağlantısında Hata Mesajlarını Anlama
SSH bağlantısı sırasında karşılaşılan yaygın hata mesajları ve çözümleri:
| Hata Mesajı | Olası Nedeni | Çözüm Yöntemi |
|---|---|---|
Connection refused | SSH servisi çalışmıyor, port kapalı | SSH servisini başlatın, portu açın |
Permission denied (publickey) | SSH anahtarları yanlış, authorized_keys hatalı | Anahtarları yeniden oluşturun, izinleri düzeltin |
Permission denied (password) | Yanlış kullanıcı adı/şifre | Doğru kimlik bilgilerini girin |
Network is unreachable | Ağ bağlantısı yok | Ağ bağlantısını kontrol edin |
Connection timed out | Firewall engeli, sunucu kapalı | Firewall kurallarını kontrol edin, sunucuyu açın |
Host key verification failed | Sunucu anahtarında değişiklik | ssh-keygen -R <sunucu_ip> komutuyla eski anahtarı silin |
8. SSH Bağlantısını Hata Ayıklama Modunda Test Etme
SSH bağlantısını hata ayıklama modunda test etmek için -v (verbose) seçeneğini kullanabilirsiniz:
ssh -vvv kullanici@sunucu_ip
Bu komut, bağlantı sırasında gerçekleşen tüm adımları detaylı bir şekilde gösterir. Örneğin:
OpenSSH_8.9p1 Ubuntu-3ubuntu0.4, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /home/caner/.ssh/config
debug1: /home/caner/.ssh/config line 1: Applying options for myserver
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: Connecting to sunucu_ip [sunucu_ip] port 22.
debug1: Connection established.
debug1: identity file /home/caner/.ssh/id_ed25519 type 3
debug1: identity file /home/caner/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.4
9. SSH Bağlantısını Güvenli Hale Getirme
SSH bağlantısını daha güvenli hale getirmek için aşağıdaki adımları uygulayabilirsiniz:
a. SSH Portunu Değiştirme
Varsayılan SSH portu olan 22 yerine farklı bir port kullanmak, otomatik saldırılardan korunmanıza yardımcı olur:
# /etc/ssh/sshd_config dosyasını düzenleyin
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırı ekleyin:
Port 2222
Değişiklikleri kaydedin ve SSH servisini yeniden başlatın:
sudo systemctl restart ssh
Not: Bağlantı kurarken portu belirtmeyi unutmayın:
ssh -p 2222 kullanici@sunucu_ip
b. SSH Anahtarları ile Giriş Zorunlu Hale Getirme
Şifre ile giriş yerine sadece SSH anahtarları ile giriş yapılmasını zorunlu hale getirmek için:
# /etc/ssh/sshd_config dosyasını düzenleyin
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırları ekleyin:
PasswordAuthentication no
PubkeyAuthentication yes
Değişiklikleri kaydedin ve SSH servisini yeniden başlatın:
sudo systemctl restart ssh
c. Fail2Ban ile Brute Force Saldırılarını Engelleme
Fail2Ban, SSH bağlantılarına yapılan brute force saldırılarını otomatik olarak engelleyen bir araçtır. Kurulum ve yapılandırma:
# Fail2Ban'ı kurun
sudo apt install fail2ban -y
# Fail2Ban'ı başlatın ve etkinleştirin
sudo systemctl enable --now fail2ban
# SSH için jail yapılandırmasını kontrol edin
sudo nano /etc/fail2ban/jail.local
Aşağıdaki satırları ekleyin:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = %(sshd_log)s
maxretry = 3
bantime = 1h
Fail2Ban’ı yeniden başlatın:
sudo systemctl restart fail2ban
Fail2Ban’ın durumunu kontrol etmek için:
sudo fail2ban-client status sshd
📌 Sonuç ve Öneriler
SSH bağlantı sorunları, genellikle basit kontroller ve doğru yapılandırmalarla çözülebilir. Bu rehberde ele aldığımız adımları takip ederek, karşılaşabileceğiniz en yaygın SSH problemlerini teşhis edebilir ve çözebilirsiniz. İşte bazı önemli öneriler:
- Düzenli Olarak SSH Servisini Kontrol Edin: SSH servisinin çalışıp çalışmadığını ve yapılandırma dosyasını periyodik olarak kontrol edin.
- Firewall Kurallarını Güncel Tutun: Gereksiz portları kapalı tutun ve sadece gerekli portları açın.
- SSH Anahtarlarını Güvenli Bir Şekilde Yönetin: Anahtarları doğru şekilde oluşturun, saklayın ve yetkilendirin.
- Fail2Ban Kullanın: Brute force saldırılarını otomatik olarak engellemek için Fail2Ban gibi araçları kullanın.
- SSH Bağlantısını Hata Ayıklama Modunda Test Edin:
-vvvseçeneğiyle bağlantı sırasında yaşanan sorunları detaylı bir şekilde inceleyin. - Güvenlik Ayarlarını İyileştirin: Varsayılan SSH portunu değiştirin, şifre ile giriş yerine SSH anahtarlarını kullanın ve
PermitRootLoginayarınınoolarak yapılandırın.
SSH bağlantı sorunlarıyla karşılaştığınızda, bu rehberdeki adımları takip ederek sorunu hızlı bir şekilde çözebilirsiniz. Unutmayın, her sistem farklı olabilir, bu nedenle sorunları çözmek için sisteminizin özel durumunu da dikkate almanız önemlidir.
Eğer SSH bağlantı sorunlarınız devam ediyorsa, sistem loglarını inceleyerek daha detaylı bilgi edinebilirsiniz:
# SSH servisinin loglarını kontrol edin
sudo journalctl -u ssh --no-pager -n 50
# Sistem genelindeki logları kontrol edin
sudo tail -f /var/log/syslog
SSH bağlantı sorunlarıyla ilgili deneyimlerinizi ve çözümlerinizi yorumlarda paylaşabilirsiniz. İyi çalışmalar! 🚀
Bu yazı Mistral ile otomatik oluşturulmuştur.