Skip to content
Bloga dön
Rehber SSH Linux Sistem Yönetimi Ağ Güvenliği Hata Ayıklama Sunucu Yönetimi Mistral

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:

  1. 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ı
  2. Kimlik Doğrulama Hataları

    • Yanlış kullanıcı adı/şifre
    • SSH anahtarlarının yanlış yapılandırılması
    • authorized_keys dosyasının yanlış izinleri
    • SELinux veya AppArmor gibi güvenlik mekanizmalarının engellemesi
  3. SSH Servisinin Çalışmaması

    • SSH servisinin durmuş olması
    • Yanlış yapılandırılmış sshd_config dosyası
    • Port çakışması
  4. 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:

  • ping komutu yanıt vermiyorsa, sunucu kapalı olabilir veya ağda bir sorun vardır.
  • telnet veya nc komutu bağlantıyı reddederse, port kapalı olabilir veya firewall engellemesi vardır.
  • nmap çıktısında port 22 kapalı 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 nedeniyle no olarak ayarlanması önerilir.
  • PasswordAuthentication: Şifre ile girişe izin verir. yes olarak ayarlanmalıdır.
  • PubkeyAuthentication: SSH anahtarları ile girişe izin verir. yes olarak 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_keys dosyasına anahtar eklenmemiş olabilir.
  • authorized_keys dosyası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 refusedSSH 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ı/şifreDoğru kimlik bilgilerini girin
Network is unreachableAğ bağlantısı yokAğ bağlantısını kontrol edin
Connection timed outFirewall engeli, sunucu kapalıFirewall kurallarını kontrol edin, sunucuyu açın
Host key verification failedSunucu anahtarında değişiklikssh-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:

  1. Düzenli Olarak SSH Servisini Kontrol Edin: SSH servisinin çalışıp çalışmadığını ve yapılandırma dosyasını periyodik olarak kontrol edin.
  2. Firewall Kurallarını Güncel Tutun: Gereksiz portları kapalı tutun ve sadece gerekli portları açın.
  3. SSH Anahtarlarını Güvenli Bir Şekilde Yönetin: Anahtarları doğru şekilde oluşturun, saklayın ve yetkilendirin.
  4. Fail2Ban Kullanın: Brute force saldırılarını otomatik olarak engellemek için Fail2Ban gibi araçları kullanın.
  5. SSH Bağlantısını Hata Ayıklama Modunda Test Edin: -vvv seçeneğiyle bağlantı sırasında yaşanan sorunları detaylı bir şekilde inceleyin.
  6. Güvenlik Ayarlarını İyileştirin: Varsayılan SSH portunu değiştirin, şifre ile giriş yerine SSH anahtarlarını kullanın ve PermitRootLogin ayarını no olarak 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.