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 noayarını yapın - Password authentication’ı devre dışı bırakın: Key tabanlı auth kullandıktan sonra
PasswordAuthentication noyapı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.