CMD ile Telnet ve SSH Bağlantısı Nasıl Kurulur

Windows ortamında uzak sunuculara bağlanmak söz konusu olduğunda, çoğu sysadmin aklına hemen PuTTY veya başka GUI araçları geliyor. Oysa CMD’nin kendi içinde barındırdığı yetenekler ve sisteme sonradan eklenebilen araçlarla, herhangi bir üçüncü parti yazılıma ihtiyaç duymadan hem Telnet hem de SSH bağlantıları kurabilirsiniz. Özellikle acil durumlarda, kısıtlı ortamlarda ya da script otomasyonu yazarken bu bilgi gerçekten hayat kurtarıcı oluyor.

Telnet Nedir, Neden Hala Kullanıyoruz?

Telnet, 1969’dan bu yana var olan, şifreli olmayan bir uzak bağlantı protokolüdür. “Şifreli değilse neden kullanalım?” diye sorabilirsiniz, haklısınız da. Ama telnet’in günümüzde hala işe yaradığı bazı senaryolar var:

  • Port testi: Bir sunucunun belirli bir portunu dinleyip dinlemediğini kontrol etmek
  • Legacy sistemler: Eski endüstriyel ekipmanlar, eski switch/router’lar, bazı ERP sistemleri
  • Troubleshooting: SMTP, HTTP, POP3 gibi protokolleri manuel olarak test etmek
  • İzole lab ortamları: İnternetten kopuk, güvenli iç ağlarda hızlı test amaçlı

Gerçek bir üretim ortamında telnet ile sunucu yönetimi yapmak 2024’te kabul edilemez, ama network troubleshooting açısından hala vazgeçilmez bir araç.

Windows’ta Telnet Özelliğini Etkinleştirmek

Windows’ta telnet istemcisi varsayılan olarak kapalı gelir. Açmak için birkaç yol var.

Yöntem 1: CMD üzerinden (Yönetici olarak)

dism /online /Enable-Feature /FeatureName:TelnetClient

Komut çalıştıktan sonra herhangi bir yeniden başlatma gerekmez, telnet hemen kullanılabilir hale gelir.

Yöntem 2: PowerShell üzerinden

Install-WindowsFeature Telnet-Client

Bu komut Windows Server ortamlarında çalışır. Windows 10/11 masaüstü sistemlerde şu komutu kullanın:

Enable-WindowsOptionalFeature -Online -FeatureName TelnetClient

Yöntem 3: GUI üzerinden

Denetim Masası > Programlar > Windows Özelliklerini Aç veya Kapat yolunu izleyerek “Telnet İstemcisi” kutucuğunu işaretleyebilirsiniz. Ama biz sysadmin’iz, GUI’ye fazla girmeyiz.

Kurulumu doğrulamak için:

telnet /?

Yardım ekranı geliyorsa telnet istemcisi başarıyla aktif edilmiş demektir.

Telnet ile Temel Bağlantı

En basit kullanım şekliyle telnet şöyle çalışır:

telnet 192.168.1.100 23

Burada 192.168.1.100 hedef IP adresi, 23 ise Telnet’in varsayılan portudur. Port belirtmezseniz zaten 23 numaralı porta bağlanmaya çalışır.

Hostname ile de kullanabilirsiniz:

telnet sunucu01.sirket.local 23

Telnet ile Port Testi: Gerçek Dünya Senaryosu

Diyelim ki bir uygulama sunucusuna 8080 portundan erişilemiyor ve sorunun firewall’dan mı yoksa uygulamanın kendisinden mi kaynaklandığını anlamaya çalışıyorsunuz.

telnet appserver01.sirket.local 8080

Eğer ekran kararır ve yanıp sönen bir imleç görürseniz, port açık ve dinlemede demektir. Eğer “Bağlantı kurulamıyor” veya “Connection refused” hatası alırsanız, ya firewall blokluyordur ya da servis o portu dinlemiyordur.

SMTP sunucusunu test etme senaryosu:

Bir mail sunucusunun 25 numaralı portunun erişilebilir olup olmadığını test edelim:

telnet mailserver.sirket.local 25

Bağlantı kurulursa şuna benzer bir yanıt alırsınız:

220 mailserver.sirket.local ESMTP Postfix

Bu, SMTP servisinin ayakta olduğunu doğrular. Hatta buradan devam edip manuel olarak SMTP komutları gönderebilir, mail akışını test edebilirsiniz:

EHLO testclient
MAIL FROM:<[email protected]>
RCPT TO:<[email protected]>

Bu yöntem, mail relay sorunlarını, spam filtrelerini ve SMTP konfigürasyonunu test ederken inanılmaz derecede kullanışlıdır.

Telnet Oturumunu Kapatmak

Telnet oturumundayken Ctrl+] tuş kombinasyonunu kullanarak telnet komut satırına geçebilir ve quit yazarak çıkabilirsiniz.

SSH’a Geçiş: Windows 10/Server 2019 ve Sonrası

Telnet’in şifreli olmayan yapısı nedeniyle gerçek uzak yönetim için SSH kullanmak zorunludur. Uzun yıllar boyunca Windows’ta SSH istemcisi yoktu ve PuTTY gibi araçlara mahkum kaldık. Ancak Microsoft, OpenSSH’ı Windows’a entegre etti ve bu durum köklü biçimde değişti.

Windows 10 1809 ve Windows Server 2019’dan itibaren OpenSSH istemcisi sistem üzerinde mevcut, sadece etkinleştirilmesi gerekiyor.

OpenSSH İstemcisini Etkinleştirmek

dism /online /Enable-Feature /FeatureName:OpenSSH.Client~~~~0.0.1.0

Alternatif olarak PowerShell ile:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Kurulumu doğrulamak için:

ssh -V

OpenSSH_8.x gibi bir versiyon çıktısı görürseniz her şey yolunda demektir.

SSH ile Temel Bağlantı Komutları

Standart SSH Bağlantısı

ssh [email protected]

Varsayılan port olan 22 kullanılır. İlk bağlantıda host key doğrulaması yapılır ve yes yazarak devam etmeniz gerekir. Bu key %USERPROFILE%.sshknown_hosts dosyasına kaydedilir.

Farklı Port Kullanımı

Güvenlik amacıyla SSH portunu değiştirmiş sunuculara bağlanmak için:

ssh -p 2222 [email protected]

-p: Bağlanılacak port numarasını belirtir (varsayılan: 22)

Kimlik Doğrulama Seçenekleri

Şifre ile bağlantı:

ssh [email protected]

Komut çalıştırıldıktan sonra şifre sorulur. Şifre ekranda görünmez, bu normaldir.

Private key ile bağlantı:

ssh -i C:Usersadmin.sshid_rsa [email protected]

-i: Kullanılacak private key dosyasının yolunu belirtir

Key tabanlı kimlik doğrulama, özellikle otomatize scriptlerde ve CI/CD pipeline’larında tercih edilir çünkü şifre girmeden bağlantı kurulabilir.

SSH Key Çifti Oluşturmak

ssh-keygen -t rsa -b 4096 -C "[email protected]"
  • -t rsa: Key tipini RSA olarak belirtir
  • -b 4096: Key uzunluğunu 4096 bit yapar
  • -C: Key’e yorum ekler, genellikle e-posta veya kullanıcı adı kullanılır

Komut çalıştırıldığında key’in nereye kaydedileceği sorulur (varsayılan C:Userskullanici.sshid_rsa), ardından isteğe bağlı bir passphrase girebilirsiniz.

Oluşturulan public key’i uzak sunucuya kopyalamak için Linux/Mac’te ssh-copy-id komutu var ama Windows CMD’de bu komut yok. Bunun yerine manuel olarak yapabilirsiniz:

type C:Usersadmin.sshid_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Gelişmiş SSH Kullanımı

SSH Config Dosyası ile Kolay Yönetim

Onlarca sunucuya bağlanıyorsanız her seferinde IP, port ve key bilgisi yazmak yorucu oluyor. %USERPROFILE%.sshconfig dosyası burada devreye giriyor:

notepad %USERPROFILE%.sshconfig

Dosya içeriği şöyle olabilir:

Host webserver
    HostName 192.168.1.10
    User admin
    Port 22
    IdentityFile ~/.ssh/id_rsa

Host dbserver
    HostName 192.168.1.20
    User dbadmin
    Port 2222
    IdentityFile ~/.ssh/db_key

Host jump-server
    HostName 203.0.113.1
    User jumpuser
    Port 22

Artık bağlantı kurmak çok daha kolay:

ssh webserver
ssh dbserver

SSH Tünelleme (Port Forwarding)

Bu özellik, güvenli olmayan ağlarda veya firewall arkasındaki servislere erişmek için kritik öneme sahip.

Local Port Forwarding:

Diyelim ki uzak sunucuda çalışan bir veritabanına (5432 portu) doğrudan erişiminiz yok ama SSH erişiminiz var:

ssh -L 5432:localhost:5432 [email protected]

Bu komut çalıştıktan sonra yerel makinenizden localhost:5432 adresine bağlandığınızda, trafik SSH tüneli üzerinden uzak sunucunun 5432 portuna yönlendirilir.

-L: Local port forwarding yapılandırması

Remote Port Forwarding:

ssh -R 8080:localhost:80 [email protected]

Bu komut, uzak sunucunun 8080 portuna gelen trafiği sizin yerel makinenizin 80 portuna yönlendirir. Yerel geliştirme ortamınızı dış dünyaya açmak için kullanışlı.

-R: Remote port forwarding yapılandırması

Jump Host (Bastion Server) Kullanımı

Güvenlik politikası gereği bazı sunuculara direkt değil, bir jump server üzerinden bağlanmanız gerekiyor olabilir:

ssh -J [email protected] [email protected]

-J: Belirtilen host üzerinden atlama yaparak hedef sunucuya bağlanır

Veya config dosyasında tanımlamak daha temiz olur:

Host internal-server
    HostName 192.168.10.50
    User admin
    ProxyJump jump-server

Komut Çalıştırma ve Dosya Transferi

SSH üzerinden interaktif oturum açmadan uzak sunucuda komut çalıştırabilirsiniz:

ssh [email protected] "df -h && free -m"

Bu özellik özellikle script otomasyonunda çok işe yarıyor. Birden fazla sunucunun disk durumunu kontrol etmek için:

for /f "tokens=*" %i in (sunucular.txt) do ssh admin@%i "hostname && df -h /"

SCP ile dosya transferi:

scp C:backupconfig.tar.gz [email protected]:/opt/backup/

Uzak sunucudan dosya indirmek için:

scp [email protected]:/var/log/syslog C:Logs

Dizin kopyalamak için:

scp -r [email protected]:/opt/myapp/ C:Downloadsmyapp

-r: Dizinleri recursive olarak kopyalar

OpenSSH Sunucusunu Windows Server’a Kurmak

Windows Server’ınızı SSH ile yönetilebilir hale getirmek istiyorsanız OpenSSH Server kurmanız gerekiyor.

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Servisi başlatmak ve otomatik başlayacak şekilde ayarlamak için:

sc start sshd
sc config sshd start=auto

Firewall kuralını eklemek için:

netsh advfirewall firewall add rule name="OpenSSH-Server-In-TCP" dir=in action=allow protocol=TCP localport=22

Varsayılan shell’i PowerShell olarak ayarlamak için (Registry üzerinden):

reg add "HKLMSOFTWAREOpenSSH" /v DefaultShell /t REG_SZ /d "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" /f

Artık Linux veya Mac’ten Windows Server’ınıza SSH ile bağlanabilirsiniz:

ssh [email protected]

Bağlantı Sorunlarını Gidermek

Verbose Mod ile Hata Ayıklama

SSH bağlantısı kurulurken sorun yaşıyorsanız verbose modu aktif edin:

ssh -v [email protected]

Daha detaylı çıktı için:

ssh -vvv [email protected]

Bu mod, hangi authentication yöntemlerinin denendiğini, key dosyasının bulunup bulunmadığını ve bağlantının hangi aşamada kesildiğini gösterir.

Known Hosts Sorunları

Sunucunun host key’i değiştiyse (yeniden kurulum sonrası sık karşılaşılan durum) şu hatayı alırsınız:

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

Eski key’i silmek için:

ssh-keygen -R 192.168.1.100

Veya known_hosts dosyasını doğrudan düzenleyebilirsiniz:

notepad %USERPROFILE%.sshknown_hosts

Port Bağlantı Testi

SSH portuna telnet ile ulaşılıp ulaşılamadığını kontrol edebilirsiniz. Bu, SSH’ın mı yoksa network’ün mü sorunlu olduğunu anlamanızı sağlar:

telnet 192.168.1.100 22

Bağlantı kurulursa ve SSH-2.0-OpenSSH gibi bir banner geliyorsa, SSH servisi çalışıyor demektir. Bağlantı kurulamıyorsa sorun network veya firewall’dadır.

Güvenlik Önerileri

Üretime hazır ortamlarda dikkat edilmesi gereken bazı önemli noktalar var:

  • Root/Administrator ile direkt bağlantıyı kapatın: Sunucu tarafında PermitRootLogin no ayarını yapın
  • Password authentication’ı devre dışı bırakın: Key tabanlı auth kullandıktan sonra PasswordAuthentication no yapın
  • SSH portunu değiştirin: 22 yerine farklı bir port kullanmak brute force saldırılarını azaltır
  • Fail2Ban veya benzeri araçlar kullanın: Başarısız giriş denemelerini engelleyin
  • SSH key’lerinizi koruyun: Private key dosyasının izinlerini kısıtlayın, passphrase ekleyin
  • Telnet’i asla production’da kullanmayın: Sadece izole test ortamlarında veya port testi için kabul edilebilir
  • Known hosts dosyasını takip edin: Beklenmedik key değişiklikleri MITM saldırısına işaret edebilir

Sonuç

CMD üzerinden Telnet ve SSH kullanımı, her Windows sysadmin’inin repertuvarında bulunması gereken temel becerilerden biri. Telnet her ne kadar eski ve güvensiz bir protokol olsa da port testi ve legacy sistem yönetimi konusunda hala değerini koruyor. SSH ise modern sistem yönetiminin bel kemiği haline geldi ve Microsoft’un OpenSSH’ı Windows’a entegre etmesi bu işleri gerçekten kolaylaştırdı.

Artık üçüncü parti araçlara muhtaç kalmadan Windows CMD’den Linux sunucularınıza SSH bağlantısı kurabilir, dosya transferi yapabilir, port yönlendirme uygulayabilir ve tüm bunları script’lerinize entegre edebilirsiniz. SSH config dosyasını düzgün yapılandırıp key tabanlı auth’a geçtiğinizde, on farklı sunucuya bağlanmak birkaç tuş vuruşuna indirgeniyor.

Acil durumlarda ya da sadece CMD bulunan bir ortamda sıkıştığınızda, bu bilgilerin ne kadar değerli olduğunu bizzat yaşayacaksınız. Bir sonraki adım olarak SSH tünelleme ve jump host kullanımını pratikte denemenizi tavsiye ederim, gerçek senaryolarda bu özelliklerin ne kadar güçlü olduğunu görünce şaşıracaksınız.

Yorum yapın