Ana içeriğe geç

SSH Kullanarak Bir Sunucuya Bağlanma

Bu makalede

Linux üzerinden SSH ile bir sunucuya bağlanma

Linux üzerinden SSH ile sunucunuza bağlanmak için şu adımları izleyin:

  1. Sunucunun IP adresini kontrol edin. Sunucunun IP adresini bildiğinizden emin olun. Bilmiyorsanız, Invapi Kontrol Paneli üzerinden bulabilirsiniz.

  2. Bir SSH istemcisi yükleyin (gerekliyse). Çoğu Linux dağıtımında bir SSH istemcisi genellikle varsayılan olarak yüklü gelir. Bunu kontrol etmek için bir terminal açın ve şu komutu çalıştırın:

    ssh --version
    

    İstemci yüklüyse, program sürümünü göreceksiniz.

    SSH istemcisi yüklü değilse, dağıtımınızın paket yöneticisini kullanarak yükleyin:

    • Ubuntu/Debian için:

      sudo apt update
      sudo apt install openssh-client
      
    • CentOS/RHEL için:

      sudo yum install openssh-clients
      
  3. Sunucuya bağlanın. Bir terminal açın ve aşağıdaki komutu girin:

    ssh <kullanıcı_adı>@<sunucu_IP_adresi>
    

    Örneğin:

  4. Şifrenizi girin. Bağlantı kurulduktan sonra sistem, belirtilen kullanıcı için şifrenizi girmenizi isteyecektir. Sunucunun giriş bilgileri ve şifresi, sunucu teslim edildiğinde size e-posta yoluyla gönderilir.

Windows üzerinden SSH ile bir sunucuya bağlanma

  1. Sunucunun IP adresini kontrol edin. Sunucunun IP adresini bildiğinizden emin olun. Bilmiyorsanız, HOSTKEY.com web sitesindeki Invapi Kontrol Paneli üzerinden https://invapi.hostkey.com adresinden bulabilirsiniz.

  2. Windows 11'de, SSH üzerinden bir sunucuya bağlanmanın birkaç yolu vardır:

OpenSSH kullanarak (yerleşik uygulama)

  • Windows 10'un Ekim 2018 Güncellemesi ile birlikte SSH istemcisi varsayılan olarak dahil edilmiştir. Bunu kontrol etmek için PowerShell'i çalıştırın ve şu komutu yürütün:

    ssh
    

    İstemci yüklüyse, kullanımı için çıktı seçeneklerini göreceksiniz.

  • SSH istemcisi yüklü değilse, Settings üzerinden etkinleştirin:

    1. **Settings** > **System** > **Additional components** yolunu izleyin.
    
    2. `OpenSSH Client` öğesini bulun ve yükleyin.
    
  • Sunucuya bağlanın. PowerShell'i açın ve aşağıdaki komutu girin:

    ssh <kullanıcı_adı>@<sunucu_IP_adresi>
    

    Örneğin:

    ssh root@192.168.0.100
    
  • Şifrenizi girin. Bağlantı kurulduktan sonra sistem, belirtilen kullanıcı için şifrenizi girmenizi isteyecektir. Sunucunun giriş bilgileri ve şifresi, sunucu teslim edildiğinde size e-posta yoluyla gönderilir.

PuTTY kullanarak (alternatif istemci):

  • PuTTY'yi resmi web sitesinden https://www.putty.org indirin.

  • PuTTY'yi başlatın ve "Host Name (or IP address)" alanına sunucunun IP adresini girin.

  • Bağlantı türünü SSH olarak belirtin ve Open butonuna tıklayın.

  • Sunucuya bağlanın:

    • Host Name (or IP address) alanına sunucunun IP adresini girin.

    • SSH için port değiştirildiyse port 22 olarak belirtin.

    • Open butonuna tıklayın. Açılan pencerede kullanıcı adınızı ve şifrenizi girin.

  • Şifrenizi girin. Bağlantı kurulduktan sonra sistem, belirtilen kullanıcı için şifrenizi girmenizi isteyecektir. Sunucunun giriş bilgileri ve şifresi, sunucu teslim edildiğinde size e-posta yoluyla gönderilir.

Not

  • Daha güvenli kimlik doğrulaması için şifre yerine SSH anahtarları kullanılması önerilir. SSH anahtarlarının kurulum talimatlarını dağıtımınızın dokümantasyonunda veya rehberimizde bulabilirsiniz.

  • Connection refused hatası alıyorsanız, hedef sunucuda SSH sunucusunun çalıştığından ve güvenlik duvarında (firewall) 22 numaralı portun açık olduğundan emin olun.

SSH Bağlantı Sorunlarını Giderme

Bu teşhis işlemini gerçekleştirerek SSH bağlantısının nerede kesildiğini belirleyebileceksiniz: kendi tarafınızda mı, sunucu tarafında mı (sshd, firewall, ayarlar) yoksa sağlayıcınızın tarafında mı. Adımları sırasıyla uygulayın ve komut çıktısını kaydedin; destek ekibi bu çıktıyı isteyecektir.

Dikkat

Aşağıdaki komutlarda SERVER_IP yerine kendi sunucunuzun IP adresini yazın. Sunucu üzerindeki komutlar root olarak veya sudo ile yürütülmelidir. Sunucuya SSH üzerinden erişilemiyorsa, hosting panelindeki web konsolu (VNC/KVM) üzerinden giriş yapın.

Adım 1. Kendi bilgisayarınızdan kontrol edin

Amaç, sunucuya ulaşılabiliyor olup olmadığını ve 22 numaralı portun yanıt verip vermediğini belirlemektir. Bu komutlar, bağlandığınız bilgisayarda yürütülür.

  1. Sunucu ağ erişilebilirliği

    ping -c 4 SERVER_IP
    

    Yanıt alınmaması mutlaka bir hata olduğu anlamına gelmez: ICMP genellikle bir güvenlik duvarı tarafından engellenir. Asıl kontrol bir sonraki adımdadır.

  2. 22 numaralı port yanıt veriyor mu?

    nc -vz -w 5 SERVER_IP 22
    
    # nc yüklü değilse:
    timeout 5 bash -c '</dev/tcp/SERVER_IP/22' && echo OPEN || echo CLOSED
    
    Sonuç Anlamı
    succeeded / open Port açık, ağ sorunsuz—sorun kimlik doğrulama veya sshd ayarlarında (Adım 4)
    Connection refused Sunucuya ulaşılabiliyor ancak 22 numaralı portta dinleme yapan bir servis yok veya firewall REJECT gönderiyor (Adımlar 2–3)
    timed out Paket kaybı yaşanıyor: firewall DROP, sağlayıcı filtresi veya rota üzerindeki bir engel (Adımlar 3 ve 5)
    No route to host Sunucuya giden bir rota yok veya sunucu kapalı (panelden durumunu kontrol edin)
  3. nmap ile hassas kontrol

    Port durumunu ve üzerinde neyin çalıştığını gösterir. Kurulum: sudo apt install nmap veya sudo dnf install nmap.

    # port 22 durumu ve SSH sunucu sürümü
    sudo nmap -Pn -sV -p 22 SERVER_IP
    
    # durum nedeni ve sunucuya giden rota ile birlikte
    sudo nmap -Pn -p 22 --reason --traceroute SERVER_IP
    
    # 22'yi diğer portlarla karşılaştırın (sadece 22 mi yoksa her şeyi mi filtreler?)
    sudo nmap -Pn -p 22,80,443,2222 --reason SERVER_IP
    
    # SSH algoritmaları – eğer betik çalışırsa, anahtar değişimi çalışıyor demektir
    nmap -Pn -p 22 --script ssh2-enum-algos SERVER_IP
    

    -Pn parametresi, ping engellenirse nmap'in sunucunun kapalı olduğunu varsaymaması için gereklidir.

    nmap Durumu Anlamı
    open (reason syn-ack) Port açık, sshd yanıt veriyor; -sV bir OpenSSH sürümü göstermelidir
    closed (reason reset) Sunucuya ulaşılabiliyor ancak sshd portu dinlemiyor (Adım 2)
    filtered (reason no-response) Paket kaybı yaşanıyor: firewall DROP veya rota üzerindeki bir engel (Adımlar 3 ve 5)
    filtered (reason admin-prohibited) Firewall bir reddetme yanıtı veriyor—sunucuda veya sağlayıcıda REJECT kuralı var (Adım 3)
    open, but -sV shows no version or tcpwrapped TCP bağlantısı geçiyor ancak SSH banner'ı alınamıyor—TCP Wrappers, fail2ban veya DPI (Adımlar 4–5)

    Eğer --traceroute yanıtları, 80/443 portları açık kalırken sağlayıcınızın düğümlerinde kesiliyorsa, bu özellikle 22 numaralı portta bir filtreleme olduğunun güçlü bir işaretidir. Çıktıyı destek ekibi için kaydedin: komuta -oN nmap.txt ekleyin.

  4. Detaylı bağlantı günlüğü

    Bağlantının hangi aşamada koptuğunu gösterir:

    ssh -vvv -o ConnectTimeout=10 user@SERVER_IP 2>&1 | tee ssh_debug.log
    
    • Connecting to aşamasında takılıyorsa — ağ sorunu.
    • Connection established sonrası kopma (örneğin SSH2_MSG_KEXINIT veya Connection reset by peer aşamasında) — tipik DPI filtreleme veya fail2ban belirtisi.
    • Permission denied — ağ sorunsuz ancak anahtar veya şifre hatalı.
  5. Sunucuya özel TCP port 22 üzerinden rota

    sudo traceroute -T -p 22 SERVER_IP
    
    # veya paket kaybı özeti:
    sudo mtr -T -P 22 -r -c 50 SERVER_IP > mtr.txt
    

    Yanıtların hangi düğümde durduğunu gözlemleyin. Sağlayıcınızın ağı içinde bir kopma olması, sunucuyla ilgili bir sorundan ziyade rota üzerindeki bir filtrelemeye işaret eder.

  6. Kendi ağınızı eleyin

    Adım 2'yi mobil erişim noktası (hotspot) kullanarak tekrarlayın ve iş/kurumsal firewall'unuzun giden port 22'yi engelleyip engellemediğini kontrol edin.

Adım 2. SSH sunucusu çalışıyor mu?

Sunucu üzerinde gerçekleştirilir (hosting web konsolu aracılığıyla). Debian/Ubuntu'da servis adı ssh; CentOS/RHEL/Alma/Rocky'de ise sshd şeklindedir.

  1. Servis durumu

    systemctl status ssh || systemctl status sshd
    

    active (running) olmalıdır. Eğer inactive veya failed ise, servisi başlatın ve açılışta çalışması için etkinleştirin:

    sudo systemctl enable --now ssh   # veya sshd
    

    Servis başlatılamazsa, nedeni günlüklerde (logs) listelenecektir.

  2. Paket yüklü değilse

    Unit ssh.service could not be found hatası:

    sudo apt install openssh-server   # Debian/Ubuntu
    sudo dnf install openssh-server   # CentOS/RHEL/Alma/Rocky
    
  3. sshd hangi portu ve adresi dinliyor?

    sudo ss -tlnp | grep -E 'sshd|:22'
    
    Çıktı Anlamı
    0.0.0.0:22 veya [::]:22 Her şey yolunda; tüm arayüzlerde dinleniyor
    127.0.0.1:22 Sadece yerel olarak dinleniyor — ListenAddress ayarını düzeltin (Adım 4)
    Diğer port, örn: :2222 O portu kullanarak bağlanın: ssh -p 2222 user@SERVER_IP
    Boş sshd çalışmıyor veya porta bağlanamıyor — yukarıdaki günlükleri inceleyin
  4. Ubuntu 22.10+ ve socket aktivasyonu

    Bu sürümlerde port, sshd_config dosyasının yanı sıra ssh.socket içinde de tanımlanmıştır. Kontrol etmek için:

    systemctl status ssh.socket
    

    Portu değiştirdikten sonra şunu çalıştırın:

    sudo systemctl daemon-reload && sudo systemctl restart ssh.socket
    
  5. Sunucunun kendisinden test etme

    ssh -v localhost
    

    Eğer yerel olarak çalışıyor ancak dışarıdan çalışmıyorsa, sorun firewall veya ağdadır (Adımlar 3 ve 5).

Adım 3. Sunucu Güvenlik Duvarı (Firewall)

Tipik olarak sunucuda üç güvenlik duvarından biri çalışır: ufw (Ubuntu), firewalld (CentOS/RHEL) veya ham iptables/nftables. Üçünü de kontrol edin—bazen ikisi aynı anda aktif olabilir.

Dikkat

Şu anda SSH üzerinden bağlıysanız ve web konsolu üzerinden değilse, önce 22 numaralı porta izin verin ve ancak ondan sonra firewall'u etkinleştirin veya yeniden başlatın; aksi takdirde erişiminizi kaybedersiniz.

ufw

sudo ufw status verbose

# eğer 22/tcp ALLOW listesinde değilse:
sudo ufw allow 22/tcp

firewalld

sudo firewall-cmd --state
sudo firewall-cmd --list-all

# eğer ssh servisler listesinde değilse:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

iptables / nftables

sudo iptables -L INPUT -n -v --line-numbers
sudo nft list ruleset

dpt:22 veya tcp dport 22 içeren ve eylemi DROP / REJECT olan kuralların yanı sıra, 22 numaralı port için bir izin kuralı olmadan policy DROP olan kuralları arayın. Kaynak (-s) veya ülke bazlı ( geoip modülleri veya ipset listeleri kullanarak) erişimi kısıtlayan kurallara dikkat edin: bunlar nedeniyle sunucuya kendi ülkeniz dışındaki her yerden erişilemeyebilir.

Zincirin başında SSH'a geçici olarak izin vermek için (yeniden başlatmaya kadar):

sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

Bağlantı bundan sonra çalışıyorsa, neden bulunmuştur; kuralı firewall (ufw/firewalld) üzerinden veya iptables-save kullanarak kaydedin.

Adım 4. sshd Ayarları ve Güvenlik Araçları

Port açıksa ancak bağlantı kopuyorsa veya kimlik doğrulama başarısız oluyorsa, yapılandırmanızı ve olası engellemeleri kontrol edin.

  1. Nihai sshd yapılandırması

    sshd_config.d/ içindeki dosyalar da dahil olmak üzere:

    sudo sshd -T | grep -Ei '^(port|listenaddress|permitrootlogin|passwordauthentication|pubkeyauthentication|allowusers|allowgroups|denyusers|maxstartups)'
    

    Kontrol edin:

    • port 22;
    • listenaddress 0.0.0.0 ( 127.0.0.1 değil);
    • eğer bu parametre ayarlanmışsa kullanıcınızın allowusers içinde olup olmadığını;
    • permitrootlogin ve passwordauthentication — bunların gereken değerlere ayarlandığından emin olun.
  2. Yeniden başlatmadan önce sözdizimi (syntax) kontrolü

    /etc/ssh/sshd_config dosyasında yapılan herhangi bir değişiklikten sonra, yeniden başlatmadan önce her zaman sözdizimini kontrol edin:

    sudo sshd -t && sudo systemctl restart ssh   # veya sshd
    
  3. fail2ban

    Başarısız giriş denemelerinden sonra IP adresinizi engellemiş olabilir:

    sudo fail2ban-client status sshd
    
    # IP adresinizin engelini kaldırmak için:
    sudo fail2ban-client set sshd unbanip YOUR_IP
    

    Dış IP adresinizi kendi bilgisayarınızdan curl -4 ifconfig.me komutuyla bulabilirsiniz. Benzer şekilde, yüklüyse CrowdSec veya sshguard'ı kontrol edin.

  4. TCP Wrappers (eski sistemlerde)

    cat /etc/hosts.allow /etc/hosts.deny 2>/dev/null
    

    hosts.deny dosyasındaki sshd: ALL gibi bir satır, hosts.allow içinde belirtilmeyen herkesi engeller.

  5. Bağlantı denemeniz sırasında sunucunun gördüğü

    Bunu sunucuda çalıştırın, ardından istemciden bağlanmayı deneyin:

    sudo journalctl -u ssh -u sshd -f
    
    # ikinci bir pencerede – paketlerin sunucuya ulaşıp ulaşmadığını kontrol edin:
    sudo tcpdump -ni any tcp port 22 and host YOUR_IP
    
    • Eğer tcpdump hiçbir şey göstermiyorsa—paketler sunucuya ulaşmıyor; sorun ağ yolundadır (Adım 5).
    • Eğer paketler ulaşıyor ancak sshd günlüğü boşsa—sunucu firewall'u tarafından düşürülüyorlardır (Adım 3).

Adım 5. Özellikle ülkenizden erişim sorunu

Sunucuda her şey yolundaysa (Adımlar 2–4) ancak ülkenizden gelen paketler ulaşmıyorsa, ülkenizden diğer ülkelerden olan port erişilebilirliğini karşılaştırmanız gerekir.

  1. Portu harici konumlardan kontrol edin

    check-host.net servisini kullanın → TCP port sekmesi, SERVER_IP:22 girin. Sonuçları kendi ülkeniz ve uluslararası düğümler için kontrol edin.

    Kendi ülkenizden Diğer ülkelerden Sonuç
    Başarısız Çalışıyor Kendi ülkenizden yönlendirme (routing) filtresi veya sunucu/host tarafında coğrafi engelleme (geoblocking)
    Başarısız Başarısız Sunucu kaynaklı sorun — Adım 2–4'e dönün
    Çalışıyor Çalışıyor İnternet servis sağlayıcınız (ISP) veya yerel ağ kaynaklı sorun
  2. Kendi ülkenizdeki sağlayıcıları karşılaştırın

    Ev interneti ve mobil operatörler genellikle farklı davranır. Eğer biri üzerinden çalışıyor diğeri üzerinden çalışmıyorsa, engel belirli bir sağlayıcı tarafındadır.

  3. Etkilenen portun özellikle 22 olup olmadığını kontrol edin

    Sunucuda /etc/ssh/sshd_config dosyasına geçici olarak ikinci bir port ekleyin (orijinal Port 22 satırı kalmalıdır):

    Port 22
    Port 2222
    

    Firewall'da 2222/tcp portuna izin verin (Adım 3), ardından şunu çalıştırın:

    sudo sshd -t && sudo systemctl restart ssh
    

    Ve bağlanın:

    ssh -p 2222 user@SERVER_IP
    

    SELinux yüklü sistemlerde (CentOS/RHEL), şu ek adımı gerçekleştirin:

    sudo semanage port -a -t ssh_port_t -p tcp 2222
    

    Eğer 2222 üzerinden çalışıyor ancak 22 üzerinden çalışmıyorsa, standart port filtreleniyor demektir.

  4. DPI filtreleme belirtileri

    TCP bağlantısı kuruluyor (nc açık gösteriyor), ancak ssh -vvv anahtar değişimi sırasında sonlanıyor; veya bağlantı birkaç saniye çalışıp sonra donuyor. Bu durumda sunucu ayarları neden değildir — lütfen günlükleri (logs) destek ekibine gönderin.

Destek mesajınıza neleri dahil etmelisiniz

Sorun çözülmezse, lütfen şunları bize gönderin — bu, teşhis süresini kısaltacaktır:

  • Sunucu IP'si ve genel (public) IP'niz (curl -4 ifconfig.me), şehir ve ISP;
  • nmap.txt dosyası ve nc -vz -w 5 SERVER_IP 22 komutunun sonucu;
  • ssh_debug.log dosyası (Adım 1, madde 4);
  • mtr.txt dosyası veya traceroute -T -p 22 çıktısı;
  • Sunucu çıktısı: systemctl status ssh, ss -tlnp | grep :22 ve firewall kuralları (ufw status verbose / firewall-cmd --list-all / iptables -L INPUT -n -v);
  • check-host.net üzerinden alınan TCP port kontrol sonucu bağlantısı;
  • Bağlantının mobil internet üzerinden ve 2222 portundan çalışıp çalışmadığı (test ettiyseniz).

Dikkat

Şifre veya özel anahtarlarınızı (private keys) göndermeyin. ssh -vvv günlüğü bunları içermez, ancak göndermeden önce lütfen kontrol edin.