Windows makinenizde uzaktan yönetim yapmak istiyorsunuz. Belki bir sunucuyu komut satırından yöneteceksiniz. Belki de CI/CD süreçlerinize güvenli bir kanal açacaksınız. İşte tam bu noktada SSH Server kurulumu devreye giriyor.
Geleneksel olarak RDP kullanıyorduk. Ancak RDP ağır bir protokoldür. Üstelik güvenlik açıkları da cabası. SSH ise hafif, şifreli ve otomasyona son derece uygun bir uzak bağlantı protokolü sunuyor.
Bu rehberde Windows 10 ve Windows 11 üzerinde OpenSSH Server’ı sıfırdan kuracaksınız. Ayrıca Server 2022 ve Server 2025 sürümlerini de öğreneceksiniz. Ardından anahtar çifti oluşturma, güvenlik duvarı kuralları, SFTP ve port yönlendirme gibi konulara hakim olacaksınız.
Ben bu kurulumu onlarca kez yaptım. Hem kendi laboratuvarımda hem de canlı üretim ortamlarında test ettim. Sizlere sadece dokümantasyonda yazanı değil, sahada işe yarayanı anlatacağım.
Hazırsanız kahvenizi alın ve koltuğunuza yerleşin. Çünkü bu rehber, Windows’ta Secure Shell dünyasına tam anlamıyla dalmanızı sağlayacak!

SSH Server Kurulumu Nedir ve Windows’ta Neden OpenSSH Kullanmalısınız?
Kısaca söyleyeyim: SSH Server kurulumu, bir Windows makinesini sunucuya dönüştürme işlemidir. Bu sunucu uzaktan komut çalıştırır ve dosya transferi yapar. Bu işlem için Microsoft, yerleşik OpenSSH paketini sunuyor.
Peki telnet kurulumu gibi eski protokolleri veya RDP gibi grafik çözümleri neden tercih etmiyoruz? Bunun yerine neden SSH kullanıyoruz? Çünkü SSH, istemci-sunucu mimarisi üzerinde çalışır. Ayrıca tüm trafiği uçtan uca şifreler. Yani aradaki veriyi kimse okuyamaz.
Özellikle bulut ortamlarında ve DevOps süreçlerinde SSH vazgeçilmezdir. GitHub Actions, Ansible ve benzeri araçlar Windows sunuculara SSH ile bağlanır. Çünkü SSH, WinRM’e göre çok daha hafif ve evrenseldir.
SSH Server kurulumu yaptığınızda şu yeteneklere kavuşursunuz:
- Uzaktan komut satırı ve tam yetkili kabuk erişimi
- Güvenli dosya transferi (SFTP ve SCP)
- Port yönlendirme ve tünel oluşturma
- Otomasyon araçlarıyla sorunsuz entegrasyon
- Parolasız giriş için anahtar tabanlı kimlik doğrulama
Ben şahsen Windows makinelerde RDP’yi acil durumlar için saklıyorum. Günlük yönetim ve otomasyon işlerimi her zaman SSH üzerinden yürütüyorum. Çünkü SSH oturumları çok daha az kaynak tüketir. Üstelik bu süreçleri kolayca otomatikleştirebilirsiniz.
SSH Protokolü ve OpenSSH Paketi: Temel Kavramlar
SSH, “Secure Shell” kelimelerinin kısaltmasıdır. Türkçeye güvenli kabuk olarak çevirebiliriz. Tatu Ylönen bu protokolü 1995 yılında geliştirdi. Geliştirici, bu protokolü ağ üzerindeki iletişimi şifrelemek için tasarladı.
OpenSSH ise SSH protokolünün en yaygın ve açık kaynaklı uygulamasıdır. Geliştiriciler bu aracı OpenBSD projesi kapsamında geliştiriyor. Üstelik neredeyse tüm Linux dağıtımlarında varsayılan olarak gelir. Microsoft da bu projeyi Windows’a Win32-OpenSSH adıyla uyarladı.
Microsoft, Windows’ta OpenSSH’yi hem istemci hem de sunucu bileşeni olarak sunar. İstemci tarafını ssh.exe temsil eder. Sunucu tarafı ise sshd.exe servisi ve sftp-server.exe alt sisteminden oluşur.
Şimdi temel bileşenleri bir tabloda netleştirelim:
| Bileşen | Görevi | Varsayılan Konum |
|---|---|---|
| ssh.exe | İstemci tarafı; uzak sunucuya bağlanır | C:\Windows\System32\OpenSSH\ |
| sshd.exe | Sunucu servisi; gelen bağlantıları dinler | C:\Windows\System32\OpenSSH\ |
| sftp-server.exe | Güvenli dosya transferi alt sistemi | C:\Windows\System32\OpenSSH\ |
| ssh-keygen.exe | Anahtar çifti oluşturma aracı | C:\Windows\System32\OpenSSH\ |
| ssh-agent.exe | Kimlik doğrulama ajanı | C:\Windows\System32\OpenSSH\ |
| sshd_config | Sunucu yapılandırma dosyası | C:\ProgramData\ssh\ |
Dikkat ederseniz yapılandırma dosyası System32 altında değil. Çünkü C:\ProgramData\ssh\sshd_config yolu, hem 32-bit hem 64-bit süreçler için ortak bir noktadır. Bu detayı ilk kurulumda atlarsanız saatler kaybedebilirsiniz.
Ben ilk kurulumlarımda bu yolu karıştırmıştım. Sonra fark ettim ki Windows, OpenSSH’ı kurarken yapılandırmayı ProgramData altına taşıyor. Bu yüzden düzenlemelerinizi her zaman bu dosya üzerinde yapmalısınız.
Copy-Item "C:\ProgramData\ssh\sshd_config" "C:\ProgramData\ssh\sshd_config.bak" komutu, olası bir hatada sizi kurtarır.Windows’ta OpenSSH vs RDP: Hangisi Ne Zaman Kullanılmalı?
Windows dünyasında uzaktan erişim denince akla ilk RDP gelir. Ancak OpenSSH ile RDP tamamen farklı ihtiyaçlara hizmet eder. Hangisini seçeceğinize karar vermek için önce amacınızı netleştirmelisiniz.
Aşağıdaki tablo, iki çözümü yan yana koyuyor. Ben bu karşılaştırmayı ekiplerime eğitim verirken sık sık kullanıyorum:
| Kriter | OpenSSH | RDP |
|---|---|---|
| Kullanım Amacı | Komut satırı, otomasyon, dosya transferi | Grafik arayüz, masaüstü erişimi |
| Kaynak Tüketimi | Çok düşük (CPU, bellek, bant genişliği) | Yüksek (grafik işleme, oturum yönetimi) |
| Güvenlik | Uçtan uca şifreleme, anahtar tabanlı kimlik | NLA, TLS; ancak daha geniş saldırı yüzeyi |
| Otomasyon | Mükemmel (PowerShell, CI/CD, Ansible) | Zayıf (GUI etkileşimi gerekir) |
| Port | 22 (TCP) | 3389 (TCP/UDP) |
| Betiklenebilirlik | Tam (scp, sftp, rsync over SSH) | Yok |
| Eşzamanlı Oturum | Sınırsız (yapılandırmaya bağlı) | Windows 10/11’de 1, Server’da 2+ |
Peki hangisini ne zaman kullanmalısınız? İşte benim sahada uyguladığım kural:
- Sunucu yönetimi ve otomasyon için her zaman SSH tercih edin. Çünkü Ansible, Terraform ve GitHub Actions SSH ile Windows’u yönetir.
- Grafik arayüz gerektiren işler için RDP kullanın. Örneğin Active Directory veya GUI tabanlı uygulama yönetiyorsanız RDP şarttır.
- Dosya transferi için SFTP kullanın. RDP üzerinden dosya kopyalamak yavaş ve risklidir.
- Acil durum erişimi için ikisini de hazır tutun. SSH çökerse RDP ile bağlanıp müdahale edebilirsiniz.
Restart-Service TermService komutuyla RDP’yi yeniden başlattım. Eğer SSH kurulu olmasaydı, sunucuya fiziksel erişim gerekecekti. İşte bu yüzden her Windows sunucusunda SSH bulunduruyorum.Windows 10 ve 11’de OpenSSH Server Nasıl Kurulur? (PowerShell ve GUI Yöntemleri)
Windows 10 ve 11’de OpenSSH Server kurmak için birden fazla yol var. Microsoft, bu bileşeni Windows isteğe bağlı özellikler (Features on Demand) kapsamında sunuyor. Yani kurulum için ekstra bir yükleyici indirmenize gerek yok.
Ek olarak, Windows, isteğe bağlı özellikleri Features on Demand paketiyle sunuyor. Üstelik, Media Feature Pack de bu sistemin bir parçası.
Ben genellikle PowerShell yöntemini tercih ediyorum. Çünkü tek bir komutla işi bitiriyor ve otomasyona uygun bir çıktı veriyor. Ancak GUI sevenler için sihirbaz tabanlı kurulum da mevcut.
Aşağıda her iki yöntemi de adım adım göstereceğim. Ayrıca Windows Server 2025 için Server Manager yolunu ve manuel kurulum senaryosunu da ele alacağım.
PowerShell ile OpenSSH Server Kurulumu: Add-WindowsCapability Komutu
PowerShell yöntemi, SSH Server kurulumu için en hızlı ve en temiz seçenektir. Yönetici olarak açtığınız bir PowerShell penceresinde tek bir komutla işi halledebilirsiniz.
Öncelikle mevcut kurulum durumunu kontrol edelim. Böylece gereksiz bir işlem yapmaktan kurtulursunuz:
Get-WindowsCapability -Online -Name OpenSSH.Server*Bu komut size State : Installed veya State : NotPresent çıktısını verir. Eğer NotPresent görüyorsanız kuruluma geçebilirsiniz. Şimdi asıl kurulum komutunu çalıştırın:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0Bu komut, Microsoft’un resmi OpenSSH paketini indirir ve sisteme entegre eder. İşlem genellikle 30 saniye ile 2 dakika arasında sürer. Kurulum tamamlandığında State : Installed çıktısını alırsınız.
Ardından servisi başlatmalısınız. Çünkü kurulum otomatik olarak servisi çalıştırmaz:
Start-Service sshdŞimdi servisin otomatik başlatılmasını ayarlayalım. Böylece her yeniden başlatmada SSH servisi kendiliğinden ayağa kalkar:
Set-Service -Name sshd -StartupType AutomaticSon olarak güvenlik duvarı kuralını eklemelisiniz. Neyse ki Windows, OpenSSH kurulumunda bu kuralı otomatik oluşturur. Yine de kontrol etmekte fayda var:
Get-NetFirewallRule -Name *OpenSSH*Eğer kural yoksa manuel olarak ekleyeceğiz. Ama önce Windows Server 2025’teki farklı yaklaşıma bakalım.
Add-WindowsCapability komutu bazen 0x800F0954 hatası verir. Bu hatanın çözümünü ilerleyen bölümlerde detaylıca ele alacağım. Şimdilik kurulumun başarılı olduğunu varsayalım.Windows Server 2025’te Server Manager ile SSH Etkinleştirme
Windows Server 2025, OpenSSH konusunda çok önemli bir yenilik getiriyor. Artık sshd.exe servisi ve OpenSSH bileşenleri varsayılan olarak kurulu geliyor.
Yani SSH Server kurulumu için ekstra bir çaba harcamanıza gerek yok. Ancak servisi manuel olarak başlatmanız ve yapılandırmanız gerekiyor. Çünkü Microsoft, güvenlik gerekçesiyle servisi varsayılan olarak durduruyor.
Server Manager üzerinden SSH’ı etkinleştirmek için şu adımları izleyin:
- Server Manager’ı açın ve Local Server sekmesine gidin.
- Sağ taraftaki Remote SSH Access bağlantısına tıklayın.
- Açılan pencerede Enable SSH seçeneğini işaretleyin.
- Apply butonuna basın. Bundan sonra, Windows, servisi başlatır ve güvenlik duvarı kuralını ekler.
Bu tek adımlık işlem, önceki sürümlerdeki karmaşık kurulum sürecini ortadan kaldırıyor. Özellikle Windows Server 2022 OpenSSH kurulumu ile uğraşanlar için büyük bir kolaylık.
Ayrıca Server 2025, OpenSSH Users grubu adında yeni bir yerel grup getiriyor. Bu gruba kullanıcı ekleyerek SSH erişimini kolayca kontrol edebilirsiniz. Gruba eklenmeyen kullanıcılar SSH üzerinden bağlanamaz.
Ben bu grubu hemen hemen her sunucuda kullanıyorum. Çünkü sshd_config dosyasında AllowGroups direktifiyle birleştirdiğinizde mükemmel bir erişim kontrolü sağlıyor. İlerleyen bölümlerde bu yapılandırmayı detaylandıracağım.
Manuel Kurulum: Win32-OpenSSH ZIP ve MSI ile Güncelleme
Bazı senaryolarda Windows Update veya isteğe bağlı özellikler çalışmaz. Örneğin hava boşluklu (air-gapped) bir ağdaysanız veya WSUS kullanıyorsanız Add-WindowsCapability hata verebilir. İşte o zaman manuel kurulum devreye girer.
Microsoft, Win32-OpenSSH sürümlerini GitHub üzerinden yayınlıyor. Buradan ZIP arşivini indirip manuel olarak kurabilirsiniz. Ayrıca MSI paketi de mevcut; bu paket, kurumsal dağıtım için idealdir.
Manuel kurulum adımları şöyle:
Adım 1
GitHub’daki PowerShell/Win32-OpenSSH deposundan en son sürümü indirin. 2026 itibarıyla güncel sürüm OpenSSH 10.4‘tür.
Adım 2
ZIP arşivini C:\Program Files\OpenSSH gibi bir klasöre çıkartın. Önce C:\Program Files\ altında OpenSSH adında bir klasör oluşturun.
Adım 3
Yönetici PowerShell penceresinde şu komutu çalıştırın:
powershell.exe -ExecutionPolicy Bypass -File Install-sshd.ps1Adım 4
Bu betik, gerekli dosyaları System32 altına kopyalar ve servisi kaydeder. Ardından servisi başlatın ve otomatik başlatmaya ayarlayın.
Adım 5
MSI paketi ile kurulum yapıyorsanız msiexec /i OpenSSH-Win64.msi komutunu kullanabilirsiniz. MSI, Grup İlkesi üzerinden dağıtım için idealdir. Ayrıca sessiz kurulum parametrelerini destekler.
Ben özellikle sunucu filolarında MSI paketini tercih ediyorum. Çünkü SCCM veya Intune üzerinden tek seferde yüzlerce sunucuya kurabilirsiniz. ZIP yöntemi ise daha çok tek seferlik kurulumlar veya test ortamları için uygundur.
Windows’ta isteğe bağlı özellikler bazen sorun çıkarıyor. .NET Framework 3.5 kurulumu da benzer sıkıntılar yaşatıyor. Bundan dolayı tam olarak burada, önceden hazırlık yapmalısınız.
Install-sshd.ps1 betiğini çalıştırmayı unutmayın. Sadece dosyaları kopyalamak yeterli değildir. Betik, servis kaydını ve gerekli kayıt defteri anahtarlarını oluşturur. Bu adımı atlarsanız Start-Service sshd komutu “servis bulunamadı” hatası verir.GUI Kurulum: setupssh.exe Sihirbazı ile Adım Adım OpenSSH Server Kurulumu
Komut satırından çekinenler için sihirbaz tabanlı kurulum harika bir alternatiftir. Ben özellikle yeni başlayanlara bu yöntemi öneriyorum. Çünkü her adımda görsel geri bildirim alırsınız.
Öncelikle sanal makine veya fiziksel makinede ağ yapılandırmasını doğrulayın. Host makinenizin ağ bağdaştırıcı IP adresini kontrol edin.
Adım 1
Host makinenizin ağ bağdaştırıcı detaylarına bakın. Burada, IP adresini, alt ağ maskesini ve ağ geçidini not edin.

Adım 2
Guest makinenin ağ ayarını VMnet4 veya Bridged olarak yapılandırın. Ardından makinenin DHCP sunucudan aldığı IP adresine bakın.

Adım 3
Şimdi VM’nin ağ bağdaştırıcı ayarını yapmalıyız. Bu yüzden bu ayarı Virtual Network Editor üzerinden denetleyin.

Adım 4
VMware Virtual Network Editor programında VMnet4 veya yeni bir VMnet oluşturabilirsiniz. VMnet4 adaptör kartını Bridged olarak ayarladığınızı kontrol edin.

Adım 5
Bilgisayarınıza indirdiğiniz OpenSSH programını sanal makineye kopyalayın. Ardından kurulumu başlatmak için setupssh.exe dosyasını yönetici olarak çalıştırın.

Adım 6
Kurulacak programın dilini seçin. Ardından OK butonuna tıklayarak ilerleyin.

Adım 7
Sihirbaz, OpenSSH programı kurulumunu hazırlar. Bu aşamada birkaç saniye beklemeniz gerekir.

Adım 8
OpenSSH kurulum penceresinde Next butonuyla ilerleyin.

Adım 9
OpenSSH lisans anlaşmasını kabul ederek sürece devam edin.

OpenSSH Sunucu Yapılandırması ve Kurulumun Tamamlanması
Adım 1
Components (Bileşenler) penceresinde Server seçeneğini işaretleyin. Client seçeneği istemci tarafı içindir.

Adım 2
Kurulum lokasyonu penceresinde varsayılan konumu değiştirmeden ilerleyin.

Adım 3
Başlangıç menü klasörü seç penceresinde Next ile devam edin.

Adım 4
Run as LOCAL_SYSTEM penceresinde bu ayarı seçin. Bu seçenek en yüksek yetkiyi verir.

Adım 5
SSH bağlantısı, varsayılan olarak port numarası 22’yi kullanır. Bu pencerede 22 değerini bırakıp ilerleyin.

Adım 6
Güvenli bağlantı için anahtar oluşturduğunuzda varsayılan değeri kabul edin. 2048 bit yeterlidir.

Adım 7
Kullanıcı ayar penceresinde Local Users seçeneğini işaretleyin. Domain kullanıcıları için farklı seçenek mevcut.

Adım 8
Windows 10 veya Windows 11 sisteminize OpenSSH kurarken bekleyin.

Adım 9
OpenSSH kurulumu tamamlandıktan sonra Finish butonuna basın. Ardından servisi manuel başlatmanız gerekir.

Get-Service sshd komutuyla servis durumunu doğrulayın. Kurulum bazen servisi başlatmayı atlar. Start-Service sshd ile manuel başlatabilirsiniz.sshd Servisini Başlatma, Otomatik Başlatma ve Windows Güvenlik Duvarı Kuralı
OpenSSH Server kurulumu tamamlandıktan sonra sıra servisi yapılandırmaya gelir. Bu adım, yapılandırma sürecinin en kritik parçasıdır. Çünkü kurulum yapmak yeterli değil; servisin çalışması ve ağdan erişilebilir olması gerekir.
Şimdi üç temel konuyu ele alacağız: servisi başlatma ve otomatik başlatmaya ayarlama, güvenlik duvarı kuralı ekleme ve bağlantıyı doğrulama. Her birini adım adım göstereceğim.
sshd Servisini Başlatma ve Otomatik Başlatmaya Ayarlama
Kurulumdan sonra sshd servisi genellikle durdurulmuş haldedir. Servisi başlatmak için yönetici yetkisiyle şu komutu çalıştırın:
Adım 1
Start-Service sshdAdım 2
Servisin durumunu kontrol etmek için Get-Service sshd komutunu kullanın. Status : Running çıktısını görmelisiniz. Eğer Stopped görüyorsanız, olay günlüğüne bakarak hata nedenini bulmalısınız.
Adım 3
Şimdi servisin her açılışta otomatik başlamasını sağlayalım:
Set-Service -Name sshd -StartupType AutomaticBu ayar, sunucu yeniden başlatıldığında SSH servisinin kendiliğinden ayağa kalkmasını sağlar. Üretim sunucularında bu ayar hayati önem taşır. Aksi halde her yeniden başlatmadan sonra manuel müdahale gerekir.
Adım 4
Servis bağımlılıklarını da kontrol etmekte fayda var. Örneğin ssh-agent servisi, anahtar tabanlı kimlik doğrulama için gereklidir. Onu da otomatik başlatmaya ayarlayın:
Set-Service -Name ssh-agent -StartupType AutomaticBen genellikle sshd ve ssh-agent servislerini birlikte yapılandırıyorum. Böylece hem sunucu tarafı hem istemci tarafı hazır oluyor. Özellikle CI/CD pipeline’larında bu ikili kombinasyon şarttır.
sc.exe failure sshd reset= 86400 actions= restart/5000/restart/10000/restart/20000 komutu, servis çöktüğünde otomatik olarak yeniden başlatır. Bu ayar, kesintisiz uzaktan erişim için kritiktir.Windows Güvenlik Duvarı SSH Kuralı: Port 22 İzni Verme
Servis çalışsa bile Windows güvenlik duvarı bağlantıları engelleyebilir. Neyse ki OpenSSH kurulumu, OpenSSH-Server-In-TCP adında bir gelen kuralı otomatik oluşturur.
Kuralın mevcut olup olmadığını şu komutla kontrol edin:
Adım 1
Get-NetFirewallRule -Name *OpenSSH* | Format-Table Name, Enabled, Direction, ActionAdım 2
Eğer kural yoksa veya devre dışıysa manuel olarak ekleyin:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22Adım 3
Bu komut, TCP portu 22 üzerinden gelen tüm bağlantılara izin verir. Ancak güvenlik açısından kaynak IP adresini kısıtlamanızı öneririm. Örneğin sadece yönetim ağından gelen bağlantılara izin verebilirsiniz:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -RemoteAddress 192.168.1.0/24Burada -RemoteAddress parametresi kritik önem taşır. Üretim ortamlarında SSH portunu tüm internete açmak son derece risklidir. Saldırganlar saniyede binlerce kez port 22’ye bağlanmayı dener. Bu nedenle kaynak IP kısıtlaması şarttır.
Ayrıca Windows güvenlik duvarının gelişmiş ayarlarını kullanarak kuralı belirli kullanıcı gruplarına da bağlayabilirsiniz. Örneğin sadece yönetici kullanıcı grubu üyeleri SSH bağlantısı kurabilsin.
Test-NetConnection -ComputerName localhost -Port 22 komutunu çalıştırın. Yerel bağlantı başarılıysa sorun güvenlik duvarında değil, ağ yapılandırmasındadır.NOT: Bağlantı sorunlarını teşhis etmek için ping komutunu kullanmalısınız. Farklı parametrelerle detaylı testler yapabilirsiniz. Ağ sorunlarını çözmek için ping parametreleri rehberini faydalı bulabilirsiniz.
Bağlantı Testi: ssh -V ve netstat -ano ile Doğrulama
Servis ve güvenlik duvarı hazır olduğuna göre bağlantıyı test edebiliriz. İlk olarak OpenSSH sürümünü kontrol edelim:
Adım 1
ssh -VAdım 2
Bu komut size OpenSSH_for_Windows_10.4 gibi bir çıktı verir. Sürüm numarası, hangi güvenlik özelliklerinin mevcut olduğunu anlamanız için önemlidir. 2026 itibarıyla güncel sürüm 10.4’tür.
Ardından servisin gerçekten bağlantı noktası 22 üzerinde dinleme yapıp yapmadığını kontrol edelim:
Adım 3
netstat -ano | findstr :22Adım 4
Bu komut, 22 numaralı portu dinleyen süreci gösterir. LISTENING durumunda bir satır görmelisiniz. Eğer göremiyorsanız servis çalışmıyor veya farklı bir port kullanıyor olabilir.
Şimdi uzak bir makineden bağlantı testi yapalım:
Adım 5
ssh kullanici@sunucu-ip-adresiAdım 6
İlk bağlantıda size sunucunun host key fingerprint‘ini gösterir ve onay ister. yes yazıp Enter’a basın. Ardından kullanıcı parolasını girmenizi isteyecektir.
Eğer bağlantı reddedilirse ssh -vvv kullanici@sunucu-ip komutuyla ayrıntılı günlük kaydı alabilirsiniz. Bu çıktı, sorunun hangi aşamada oluştuğunu net şekilde gösterir. Kimlik doğrulama mı, ağ bağlantısı mı, yoksa anahtar sorunu mu olduğunu anlarsınız.
Ben her yeni kurulumda mutlaka ssh -vvv testi yaparım. Çünkü bu komut, yapılandırma hatalarının çoğunu daha bağlantı kurulmadan ortaya çıkarır.
Windows 11’de SSH Anahtar Kimlik Doğrulama: ssh-keygen, authorized_keys ve icacls İzin Yönetimi
Parola ile SSH bağlantısı çalışır ancak güvenli değildir. Brute-force saldırılarına karşı savunmasızdır. İşte bu yüzden anahtar tabanlı kimlik doğrulama kullanmalısınız.
Bu yöntemde bir anahtar çifti oluşturma işlemi yaparsınız: Özel anahtar (private key) sizde kalır. Buna ek olarak genel anahtarı (public key) sunucuya yerleştirirsiniz. Sunucu, özel anahtarınızın matematiksel eşini görürse sizi içeri alır.
Bu bölümde ssh-keygen ile anahtar üretmeyi, authorized_keys dosyasını yapılandırmayı ve icacls ile dosya izinlerini düzeltmeyi öğreneceksiniz.
ssh-keygen ile ED25519 Anahtar Çifti Oluşturma
Anahtar üretmek için ssh-keygen komutunu kullanacağız. Ben her zaman ED25519 algoritmasını tercih ediyorum. Çünkü RSA’dan daha kısa, daha hızlı ve daha güvenlidir.
İstemci makinenizde PowerShell açın ve şu komutu çalıştırın:
Adım 1
ssh-keygen -t ed25519 -C "windows-ssh-2026"Adım 2
Bu komut size üç soru soracak. İlk soru dosya konumudur. Varsayılan olarak C:\Users\kullanici\.ssh\id_ed25519 önerilir. Enter’a basıp geçin.
Adım 3
İkinci soru parola (passphrase) içindir. Boş bırakabilirsiniz ancak güvenlik için bir parola girmenizi öneririm. Bu parola, özel anahtarınızı şifreler.
Adım 4
Üçüncü soruda aynı parolayı tekrar girin. İşlem tamamlandığında iki dosya oluşur: id_ed25519 (özel anahtar) ve id_ed25519.pub (genel anahtar).
Genel anahtarın içeriğini görüntülemek için:
Get-Content $env:USERPROFILE\.ssh\id_ed25519.pubBu çıktıyı kopyalayıp sunucuya taşıyacağız. Ama önce sunucu tarafındaki yapılandırmayı görelim.
Eğer RSA anahtarı kullanmanız gerekiyorsa (eski sistemlerle uyumluluk için) ssh-keygen -t rsa -b 4096 komutunu kullanabilirsiniz.
Ancak 2026 itibarıyla ssh-rsa algoritması varsayılan olarak devre dışıdır. Bu konuyu hata çözümü bölümünde detaylıca ele alacağım.
id_ed25519 dosyası sizin kimliğinizdir. Bu dosyayı e-posta ile gönderirseniz veya USB bellekte taşırsanız büyük bir güvenlik ihlali yaparsınız. Dahası dosyayı bulut depolamaya yüklemeniz de ciddi bir güvenlik açığı oluşturur. Sadece .pub uzantılı genel anahtarı paylaşın.authorized_keys ve administrators_authorized_keys Yapılandırması
Sunucu tarafında iki farklı yetkilendirme dosyası bulunur. Normal kullanıcılar için authorized_keys, yönetici kullanıcılar için administrators_authorized_keys kullanılır.
Normal kullanıcılar için dosya yolu şöyledir:
C:\Users\kullanici\.ssh\authorized_keysYönetici kullanıcılar için dosya yolu ise şudur:
C:\ProgramData\ssh\administrators_authorized_keysBen genellikle her iki dosyayı da oluşturuyorum. Çünkü bazen bir kullanıcı hem normal hem yönetici yetkisiyle bağlanmak isteyebilir. Ayrıca sshd_config dosyasındaki Match bloğu ile bu davranışı özelleştirebilirsiniz.
Genel anahtarınızı dosyaya eklemek için şu komutu kullanın:
Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value (Get-Content $env:USERPROFILE\.ssh\id_ed25519.pub)Bu komut, istemci makinenizdeki genel anahtarı sunucudaki yetkilendirme dosyasına ekler. Eğer uzak bir makineden bağlanıyorsanız önce genel anahtarı sunucuya kopyalamanız gerekir. Bunun için scp kullanabilirsiniz:
scp $env:USERPROFILE\.ssh\id_ed25519.pub kullanici@sunucu:C:\Users\kullanici\.ssh\authorized_keysAncak bu yöntem dosya izinlerini otomatik ayarlamaz. Bu yüzden bir sonraki adımda icacls ile izinleri düzelteceğiz.
authorized_keys dosyası UTF-8 kodlamasında olmalıdır.Notepad ile oluşturduğunuz dosyaları sistem bazen UTF-16 formatında kaydeder. Bu durumda SSH sunucusu anahtarı okuyamaz. Dosyayı Set-Content -Encoding UTF8 ile oluşturduğunuzdan emin olun.icacls ile Yetki Kalıtımı Kırma ve Doğru ACL Ayarları
Windows’ta dosya izinleri, SSH’ın en çok takıldığı noktadır. Linux’ta chmod 600 tek komutla çözülürken Windows’ta erişim kontrol listesi (ACL) yönetimi gerekir.
OpenSSH, authorized_keys dosyasının sadece sahibi ve SYSTEM tarafından yazılabilir olmasını ister. Aksi halde Permission denied (publickey) hatası verir.
İzinleri düzeltmek için önce kalıtımı kırmalıyız. Çünkü varsayılan olarak dosya, üst klasörden izinleri devralır:
Adım 1
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:rAdım 2
Ardından sadece Administrators ve SYSTEM gruplarına tam yetki verelim:
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "Administrators:F" /grant "SYSTEM:F"Adım 3
Bu iki komut, dosyayı SSH’ın beklediği formata getirir. Benzer işlemi normal kullanıcı dosyası için de yapmalısınız:
icacls "C:\Users\kullanici\.ssh\authorized_keys" /inheritance:r /grant "kullanici:F" /grant "SYSTEM:F"Adım 4
Şimdi servisi yeniden başlatın ve anahtar tabanlı bağlantıyı test edin:
Restart-Service sshdBağlantıda parola sorulmadan doğrudan oturum açılmalıdır. Eğer hala parola soruluyorsa ssh -vvv çıktısını inceleyin. Genellikle dosya izinleri veya sshd_config içindeki PubkeyAuthentication satırı sorunludur.
Ben bu izin ayarlarını bir PowerShell betiğine dönüştürdüm. Her yeni kullanıcı eklediğimde otomatik çalıştırıyorum. Bu sayede manuel hataları tamamen ortadan kaldırdım.
Kullanıcı Hesabı Oluşturma ve Yetkilendirme
Güvenlik açısından her istemci için ayrı bir kullanıcı oluşturun. Bu sayede erişim kontrolünü kolayca yönetirsiniz.
Adım 1
Computer Management (Bilgisayar Yönetimi) konsolunu açın. Local Users and Groups bölümüne gidin.

Adım 2
Users klasörüne sağ tıklayın. Ardından New User seçeneğini seçin.

Adım 3
Kullanıcı oluşturma penceresi açıldığında Yeni Kullanıcı seçeneğine tıklayın.

Adım 4
Kullanıcı adı, parola ve açıklama alanlarını doldurun. “Parola asla sona ermesin” seçeneğini işaretleyin.

Adım 5
Create butonuna basıp kullanıcıyı oluşturun. Ardından Close ile pencereyi kapatın.

Adım 6
SSHUser kullanıcısını Administrator üyesi yapmak amacıyla çift tıklayın.

Adım 7
Üyelik sekmesine geçin. Ardından bir alttaki Ekle butonuna tıklayarak devam edin.

Adım 8
Grup seç penceresinde alttaki Gelişmiş butonuna tıklayın.

Adım 9
Daha sonra Bul butonuna tıklayarak işletim sistemi üzerinde grupları arayın.

Adım 10
Administrator hesabını seçtikten sonra OK’ basın.

Adım 11
Son olarak tekrar OK’layın.

Adım 12
Kullanıcıyı Administrator grubuna üye yaptıktan sonra OK’a basıp kaydedin.

sshd_config dosyasında AllowGroups direktifiyle bu gruba erişim verin.sshd_config Windows Ayarları: Port Değiştirme, Güvenlik Sertleştirme ve İleri Düzey Yapılandırma
sshd_config dosyası, SSH sunucusunun beynidir. Bu dosyada yapacağınız her değişiklik, sunucunun davranışını doğrudan etkiler. Bu bölümde port değiştirmeyi, temel sertleştirmeyi ve post-kuantum kriptografi gibi ileri düzey konuları ele alacağız.
Windows’ta yapılandırma dosyası C:\ProgramData\ssh\sshd_config yolundadır. Bu dosyayı düzenlemeden önce mutlaka yedekleyin.
Ben her değişiklik öncesi şu komutu çalıştırıyorum:
Copy-Item "C:\ProgramData\ssh\sshd_config" "C:\ProgramData\ssh\sshd_config.bak"Bu yedekleme alışkanlığı, birçok kez beni büyük sıkıntıdan kurtardı. Özellikle üretim sunucularında yapılandırma hatası, tüm erişimi kesebilir.
Windows’ta SSH Port Değiştirme (22’den 2222’ye) ve Güvenlik Duvarı Güncellemesi
Varsayılan bağlantı noktası 22’yi tüm dünya bilir. Bu yüzden saldırganların ilk hedefidir. Portu değiştirmek, güvenlik açısından önemli bir adımdır. Tabii ki tek başına yeterli değildir ama saldırı yüzeyini daraltır.
Adım 1
Port değiştirmek için sshd_config dosyasını açın ve Port 22 satırını bulun.
Adım 2
Bu satırı Port 2222 olarak değiştirin.
Port 2222Adım 3
Ardından Windows güvenlik duvarı kuralını güncellemelisiniz. Eski kuralı devre dışı bırakıp yeni bir kural ekleyin:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP-2222" -DisplayName "OpenSSH Server (sshd) 2222" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 2222Adım 4
Şimdi servisi yeniden başlatın:
Restart-Service sshdAdım 5
Bağlantı testi için ssh kullanici@sunucu -p 2222 komutunu kullanmalısınız. -p parametresi, port numarasını belirtir. Unutmayın, artık 22 portu üzerinden bağlantı kuramazsınız.
Ben genellikle 22 portunu tamamen kapatıyorum. Sadece 2222 gibi yüksek bir port açık bırakıyorum. Ayrıca -RemoteAddress parametresiyle kaynak IP kısıtlaması da ekliyorum. Bu ikili kombinasyon, SSH sunucusunu büyük ölçüde görünmez kılıyor.
Temel Sertleştirme: PermitRootLogin, MaxAuthTries ve GSSAPIAuthentication
SSH sunucusunu güvenli hale getirmek için birkaç temel ayarı mutlaka yapmalısınız. Bu ayarlar, saldırı yüzeyini minimuma indirir. Aşağıdaki tablo, benim her sunucuda uyguladığım standart sertleştirme ayarlarını gösteriyor:
| Ayar | Önerilen Değer | Açıklama |
|---|---|---|
| PermitRootLogin | no | Root kullanıcısının doğrudan girişini engeller |
| MaxAuthTries | 3 | 3 başarısız denemeden sonra bağlantıyı keser |
| PasswordAuthentication | no | Parola ile girişi tamamen devre dışı bırakır |
| PubkeyAuthentication | yes | Sadece anahtar tabanlı girişe izin verir |
| PermitEmptyPasswords | no | Boş parolalı hesapları reddeder |
| GSSAPIAuthentication | no | Gereksiz GSSAPI kimlik doğrulamasını kapatır |
| X11Forwarding | no | X11 yönlendirmesini kapatır (Windows’ta gerekli değil) |
Bu ayarları sshd_config dosyasının sonuna ekleyin. Ardından servisi yeniden başlatın. PasswordAuthentication no ayarını yapmadan önce anahtar tabanlı girişin çalıştığından emin olun. Aksi halde sunucuya erişiminizi tamamen kaybedebilirsiniz.
MaxAuthTries ayarı özellikle önemlidir. Varsayılan değer 6’dır. Bunu 3’e düşürmek, brute-force saldırılarını yavaşlatır. Saldırgan 3 denemede başarısız olursa bağlantı kesilir ve yeniden bağlanması gerekir.
GSSAPIAuthentication no ayarı, Windows’ta genellikle gereksizdir. Kerberos tabanlı kimlik doğrulama kullanmıyorsanız bu ayarı kapatmak, her bağlantıda gereksiz gecikmeyi önler.
PasswordAuthentication no ayarını yapmadan önce mutlaka ssh -i ozel_anahtar kullanici@sunucu komutuyla anahtarla giriş yapabildiğinizi doğrulayın. Aksi halde sunucudan tamamen kilitlenirsiniz ve fiziksel erişim gerekir.İleri Düzey: Post-Kuantum Kriptografi ve ssh-rsa Algoritma Uyumluluğu
Kuantum bilgisayarlar, mevcut şifreleme algoritmalarını kırma potansiyeline sahip. Bu yüzden post-kuantum kriptografi çalışmaları hız kazandı. OpenSSH da bu alanda önemli adımlar atıyor.
2026 Temmuz ayında yayınlanan OpenSSH 10.4, deneysel düzeyde post-kuantum imza desteği getirdi. Bu sürüm, ML-DSA 44 ve Ed25519 birleşiminden oluşan kompozit bir imza şeması sunuyor.
Post-kuantum algoritmaları test etmek için sshd_config dosyasına şu satırları ekleyebilirsiniz:
HostKeyAlgorithms mlkem768x25519-sha256,ssh-ed25519
KexAlgorithms sntrup761x25519-sha512@openssh.com,mlkem768x25519-sha256Ancak bu algoritmalar deneysel aşamadadır. Üretim ortamlarında kullanmadan önce kapsamlı testler yapmalısınız. Ben henüz canlı sistemlerde bu algoritmaları etkinleştirmedim. Ancak laboratuvar ortamında test ediyorum.
Eski sistemlerle uyumluluk için ssh-rsa algoritmasına ihtiyaç duyabilirsiniz. OpenSSH 8.8 ve sonrası bu algoritmayı varsayılan olarak devre dışı bırakır. Yeniden etkinleştirmek için sshd_config dosyasına şu satırları ekleyin:
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsaBu satırlar, ssh-rsa algoritmasını eski istemciler için tekrar açar. Ancak güvenlik açısından bu algoritmayı yalnızca zorunlu olduğunda kullanın. Mümkün olan en kısa sürede ED25519’e geçiş yapın.
Ben yıllardır ED25519 kullanıyorum. Hem daha hızlı hem de daha güvenli. Eski bir sistemle çalışmak zorunda kalmadıkça ssh-rsa için geriye dönük uyumluluk eklemiyorum.
Windows SSH Tünel Oluşturma: -L, -R ve SOCKS Proxy ile Gerçek Dünya Senaryoları
SSH tünelleme, en güçlü özelliklerden biridir. Bu sayede güvenli olmayan ağlarda bile şifreli kanallar kurabilirsiniz. Bu bölümde üç tünel türünü gerçek senaryolarla anlatacağım.
Ben tünellemeyi özellikle veritabanı yönetimi ve uzak masaüstü erişimi için kullanıyorum. Çünkü doğrudan internet’e açık veritabanı sunucuları büyük risk taşır. SSH tüneli, bu riski ortadan kaldırır.
Yerel Port Yönlendirme (-L): Uzak Masaüstü ve Veritabanı Tüneli
Yerel port yönlendirme, kendi makinenizdeki bir portu uzak sunucudaki bir porta bağlar. -L parametresi ile kullanılır. Ben bunu en çok veritabanı tünelleri için kullanıyorum.
Diyelim ki uzak sunucuda çalışan bir MySQL veritabanına erişmek istiyorsunuz. Ancak veritabanı portu dış dünyaya kapalı. Şu komutla güvenli bir tünel açabilirsiniz:
ssh -L 3306:localhost:3306 kullanici@uzak-sunucuBu komut, kendi makinenizdeki 3306 portunu uzak sunucudaki 3306 portuna bağlar. Artık localhost:3306 adresine bağlanan her istemci, aslında uzak sunucudaki veritabanına erişir.
Benzer şekilde uzak masaüstü SSH tüneli için şu komutu kullanabilirsiniz:
ssh -L 13389:localhost:3389 kullanici@uzak-sunucuArdından RDP istemcinizde localhost:13389 adresine bağlanırsınız. Bu yöntem, RDP portunu internete açmadan güvenli uzak masaüstü erişimi sağlar.
Ben bu yöntemi özellikle müşteri sunucularına bağlanırken kullanıyorum. Çünkü RDP’yi doğrudan açmak yerine SSH tüneli üzerinden geçiriyorum. Bu sayede tüm trafik şifreli kalıyor.
Uzak Port Yönlendirme (-R) ve Dinamik SOCKS Proxy (-D)
Uzak port yönlendirme, yerel makinenizdeki bir servisi uzak sunucuya açar. -R parametresi ile kullanılır. Geliştiriciler bu işlemi genellikle ters SSH tüneli olarak adlandırır.
Örneğin evinizdeki bir web sunucusunu dış dünyaya açmak istiyorsunuz. Ancak modemde port yönlendirme yapamıyorsunuz. Şu komutla ters tünel kurabilirsiniz:
ssh -R 8080:localhost:80 kullanici@uzak-sunucuBu komut, uzak sunucudaki 8080 portunu sizin makinenizdeki 80 portuna bağlar. Artık uzak sunucunun IP adresine 8080 portundan bağlanan herkes, sizin ev sunucunuza erişir.
Dinamik port yönlendirme ise -D parametresi ile yapılır. Bu, bir SOCKS vekil sunucusu oluşturur. Tüm tarayıcı trafiğinizi SSH üzerinden geçirmek için idealdir:
ssh -D 1080 kullanici@uzak-sunucuArdından tarayıcınızın proxy ayarlarında SOCKS5 proxy olarak localhost:1080 adresini tanımlarsınız. Tüm internet trafiğiniz uzak sunucu üzerinden şifreli olarak akar.
Ben bu yöntemi halka açık Wi-Fi ağlarında kullanıyorum. Özellikle havaalanlarında veya otellerde, tüm trafiğimi kendi sunucum üzerinden geçiriyorum. Bu sayede yerel ağdaki kötü niyetli kişiler verilerimi okuyamıyor.
ssh -L 5432:localhost:5432 kullanici@db-sunucu komutuyla PostgreSQL’e bağlanıyorum. Bu yöntem hem güvenli hem de denetlenebilir.Windows’ta SFTP Sunucusu Kurma ve ChrootDirectory ile Kullanıcı Kısıtlama
SFTP, SSH üzerinden güvenli dosya transferi sağlar. FTP’nin aksine tüm trafik şifrelidir. Windows’ta OpenSSH kurduğunuzda SFTP alt sistemi otomatik olarak gelir.
Ancak SFTP’yi güvenli hale getirmek için kullanıcıları belirli bir dizine hapsetmeniz gerekir. Bu işleme chroot hapishanesi denir. Şimdi, SFTP yapılandırmasını ve chroot ayarını göstereceğim.
SSH ile dosya transferi için SFTP kullanıyorsunuz. Bazı senaryolarda TFTP gibi basit protokoller de işe yarıyor. Şunu da eklemeden geçmeyeyim, ağ cihazlarının yapılandırmasında TFTP yaygın. Windows’ta TFTP sunucusu kurulumu da oldukça kolaydır.
Subsystem sftp Yapılandırması ve sftp-server.exe Yolu
SFTP alt sisteminin çalışması için sshd_config dosyasında şu satırın bulunması gerekir:
Subsystem sftp sftp-server.exeBu satır, SSH sunucusuna SFTP isteklerini sftp-server.exe programına yönlendirmesini söyler. Windows’ta bu dosya C:\Windows\System32\OpenSSH\ altındadır.
Eğer satır eksikse veya yorumlanmışsa SFTP bağlantıları başarısız olur. Ben her kurulumda bu satırı kontrol ediyorum. Çünkü bazen yapılandırma dosyası güncellemelerinde bu satır kaybolabiliyor.
SFTP günlüklemesini etkinleştirmek için şu satırları ekleyebilirsiniz:
SyslogFacility LOCAL0
LogLevel DEBUG3Bu ayarlar, SFTP oturumlarındaki tüm işlemleri günlüğe kaydeder. Günlük dosyaları C:\ProgramData\ssh\logs altında oluşur. Hata ayıklama sırasında bu günlükler paha biçilmezdir.
SFTP bağlantısını test etmek için sftp kullanici@sunucu komutunu kullanabilirsiniz. Başarılı bağlantıda sftp> istemi görürsünüz. ls, put, get gibi komutlarla dosya işlemleri yapabilirsiniz.
ChrootDirectory ve Match Bloğu ile Kullanıcı İzolasyonu
Varsayılan olarak SFTP kullanıcıları tüm dosya sistemine erişebilir. Bu büyük bir güvenlik riskidir. Kullanıcıları belirli bir klasöre hapsetmek için ChrootDirectory direktifini kullanmalısınız.
Adım 1
Önce SFTP için ayrı bir kullanıcı grubu oluşturun. Ardından sshd_config dosyasının sonuna bir Match bloğu ekleyin:
Match Group sftp-users
ChrootDirectory C:\SFTP\%u
ForceCommand internal-sftp
AllowTcpForwarding no
PermitTunnel noAdım 2
Bu yapılandırma, sftp-users grubundaki tüm kullanıcıları kendi ev dizinlerine hapseder. %u değişkeni, kullanıcı adını temsil eder. Yani ahmet kullanıcısı C:\SFTP\ahmet dizinine hapsolur.
Adım 3
Ancak Windows’ta chroot uygulamak Linux’taki kadar basit değildir. Çünkü NTFS izinleri ile OpenSSH’ın chroot mekanizması arasında karmaşık bir etkileşim vardır. Chroot dizininin sahibi SYSTEM olmalı ve kullanıcıların yazma izni olmamalıdır.
İşte doğru izin yapılandırması:
icacls "C:\SFTP\ahmet" /inheritance:r /grant "SYSTEM:F" /grant "Administrators:F"Adım 4
Kullanıcının dosya yükleyebilmesi için ayrı bir alt klasör oluşturun ve oraya yazma izni verin:
mkdir "C:\SFTP\ahmet\upload"
icacls "C:\SFTP\ahmet\upload" /grant "ahmet:M"Adım 5
Bu yapılandırma, kullanıcının sadece upload klasörüne dosya yüklemesine izin verir. Chroot dizininin kendisine yazamaz. Bu, kullanıcı izolasyonu için kritik bir adımdır.
Ben her SFTP kullanıcısı için bu yapıyı otomatik oluşturan bir PowerShell betiği yazdım. Betik, kullanıcıyı oluşturur, gruba ekler, dizinleri yapılandırır ve izinleri ayarlar. Bu sayede yüzlerce kullanıcıyı saniyeler içinde hazırlayabiliyorum.
sftp bağlantısı kurup cd .. komutunu çalıştırın. “Couldn’t canonicalize: No such file or directory” hatası alırsanız chroot çalışıyor demektir. Kullanıcı üst dizinlere çıkamaz.Windows 11’de OpenSSH Hata Çözümü: 0x800F0954 ve Bağlantı Reddedildi Senaryoları
Her kurulum sorunsuz gitmez. Özellikle kurumsal ortamlarda Windows OpenSSH hata çözümü bilgisi hayat kurtarır. Bu hatalarla onlarca kez karşılaştım. Çözümlerini ezbere biliyorum. Siz de bu bölümü okuduktan sonra aynı rahatlığa kavuşacaksınız.
0x800F0954 ve 0x800F0950: WSUS ve Grup İlkesi Kaynaklı Kurulum Hataları
Add-WindowsCapability komutu bazen 0x800F0954 hatası verir. Bu hata, Windows’un isteğe bağlı özellik paketini bulamadığı anlamına gelir. Genellikle WSUS veya grup ilkesi kaynaklıdır.
Sorunun kökeni şudur: WSUS, isteğe bağlı özellikler için gerekli .cab dosyalarını sunuculara dağıtmaz. Bu nedenle Windows, OpenSSH paketini indiremez. Aynı sorun 0x800F0950 ve 0x8024402C hatalarında da görülür.
Çözüm için şu adımları izleyin:
Adım 1
Kayıt defteri düzenleyicisini açın. Ardından şu anahtara gidin: HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
Adım 2
UseWUServer DWORD değerini bulun. Değeri 1 ise 0 yapın.
Adım 3
Windows Update servisini yeniden başlatın: Restart-Service wuauserv
Adım 4
Şimdi Add-WindowsCapability komutunu tekrar çalıştırın.
Bu yöntem, WSUS’un devre dışı bırakılmasını gerektirir. Ancak geçici olarak yapmanız yeterlidir. Kurulum tamamlandıktan sonra UseWUServer değerini tekrar 1 yapabilirsiniz.
Alternatif olarak, OpenSSH’ı manuel ZIP paketiyle kurabilirsiniz. Bu yöntem, WSUS’a hiç dokunmadan sorunu çözer. Özellikle hava boşluklu ağlarda tek seçenek budur.
Permission denied (publickey) ve ssh-rsa Algoritma Uyumsuzluğu Çözümü
Permission denied (publickey) hatası, SSH kullanıcılarının kâbusudur. Bu hata, anahtar tabanlı girişin reddedildiği anlamına gelir. Birden fazla nedeni olabilir.
Adım 1
İlk kontrol etmeniz gereken şey dosya izinleridir. authorized_keys dosyası sadece sahibi ve SYSTEM tarafından yazılabilir olmalıdır. İzinleri düzeltmek için icacls komutunu kullanın:
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"Adım 2
İkinci olası neden ssh-rsa algoritmasının devre dışı olmasıdır. OpenSSH 8.8’den itibaren bu algoritma varsayılan olarak kapalıdır. Eğer eski bir istemci kullanıyorsanız bağlantı başarısız olur.
Çözüm için sshd_config dosyasına şu satırları ekleyin:
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsaAdım 3
Ardından servisi yeniden başlatın. Bu değişiklik, ssh-rsa algoritmasını tekrar etkinleştirir. Ancak güvenlik açısından bu algoritmayı yalnızca zorunlu olduğunda kullanın.
Adım 4
Üçüncü olası neden, sshd_config dosyasındaki PubkeyAuthentication satırının no olmasıdır. Bu satırı yes yapın. Ayrıca AuthorizedKeysFile satırının doğru yolu gösterdiğinden emin olun.
Ben bu üç kontrolü her Permission denied hatasında sırayla yapıyorum. Vakaların %90’ında sorun bu üç nedenden biridir. Kalan %10 ise genellikle anahtar dosyasının bozuk olması veya yanlış kullanıcıya ait olmasıdır.
Son olarak ssh -vvv çıktısını mutlaka inceleyin. Bu çıktı, tam olarak hangi aşamada takıldığınızı gösterir.
Örneğin “Offering public key” satırından sonra hata alıyorsanız sorun sunucu tarafındadır. “Authentications that can continue” satırından sonra hata alıyorsanız istemci tarafında sorun var demektir.
Windows SSH Sunucu Güvenlik Ayarları ve Uyumluluk Denetimi
SSH sunucusunu kurmak yeterli değil. Onu güvenli tutmak için sürekli denetlemeniz gerekir. Ben her üretim sunucusunda bu ayarları uyguluyorum. Ayrıca aylık güvenlik denetimi yapıyorum. Bu sayede olası açıkları erken tespit ediyorum.
AllowUsers, DenyUsers ve Match Bloğu ile Erişim Kontrolü
SSH sunucusuna kimin bağlanabileceğini kontrol etmek kritik önem taşır. Varsayılan olarak tüm yerel kullanıcılar bağlanabilir. Bu genellikle istenmeyen bir durumdur.
AllowUsers direktifi ile sadece belirli kullanıcılara izin verebilirsiniz:
AllowUsers admin yedeklemeBu ayar, sadece admin ve yedekleme kullanıcılarının SSH bağlantısı kurmasına izin verir. Sistem, diğer tüm kullanıcıları reddeder.
DenyUsers direktifi ise belirli kullanıcıları engeller. Genellikle Administrator gibi yerleşik hesapları engellemek için kullanılır:
DenyUsers Administrator GuestMatch bloğu ile daha granüler kontrol yapabilirsiniz. Örneğin belirli bir kullanıcı grubuna farklı ayarlar uygulayabilirsiniz:
Match Group sftp-users
ChrootDirectory C:\SFTP\%u
ForceCommand internal-sftp
PermitTunnel noBu yapılandırma, sftp-users grubundaki kullanıcıların sadece SFTP kullanmasına izin verir. SSH kabuk erişimini tamamen kapatır.
Ben her sunucuda en az bir Match bloğu kullanıyorum. Çünkü farklı kullanıcı gruplarının farklı ihtiyaçları oluyor. Yöneticiler tam erişim alırken, otomasyon hesapları sadece belirli komutları çalıştırabiliyor.
AllowUsers veya DenyUsers ayarlarını yaparken kendi kullanıcı adınızı eklemeyi unutmayın. Aksi halde sunucudan tamamen kilitlenirsiniz. Değişikliği yaptıktan sonra mevcut oturumunuzu kapatmadan yeni bir bağlantı testi yapın.Event Viewer ve SSH Posture Control ile Denetim
SSH olaylarını izlemek, güvenlik ihlallerini erken tespit etmenin en iyi yoludur. Windows’ta OpenSSH, olayları Event Viewer üzerinden kaydeder.
Olay günlüğü konumu şöyledir: Applications and Services Logs > OpenSSH > Operational. Sistem bu günlükte bağlantı denemelerini, kimlik doğrulama başarılarını ve hataları tutar.
Ben düzenli olarak bu günlüğü inceliyorum. Özellikle başarısız bağlantı denemeleri, olası bir saldırının habercisi olabilir. Event Viewer’da Event ID 4 başarısız kimlik doğrulamayı, Event ID 2 ise başarılı bağlantıyı gösterir.
Ayrıca Windows Server 2025, SSH Posture Control adında yeni bir özellik getiriyor. Bu özellik, Azure Policy ve PowerShell kombinasyonuyla SSH yapılandırmasını denetler, uygular ve düzeltir.
SSH Posture Control’ün sağladığı denetimler şunlardır:
- SSH servisinin çalışıp çalışmadığını kontrol eder
- Zayıf kriptografi algoritmalarını tespit eder
- Güvenlik duvarı kurallarını doğrular
- Yetkisiz yapılandırma değişikliklerini raporlar
- Uyumluluk taraması sonuçlarını Azure’a gönderir
Bu özellik, özellikle büyük ölçekli Windows sunucu filoları yönetenler için büyük kolaylık sağlıyor. Ben henüz tüm sunucularımda etkinleştirmedim. Ancak pilot testlerde çok olumlu sonuçlar aldım.
Windows 10 ve 11’de SSH Araçları: Windows Terminal, PowerShell, WinSCP ve VS Code
SSH sunucusu kurulduktan sonra onu kullanacak araçlara ihtiyacınız var. Windows ekosisteminde birçok seçenek mevcut. Bu bölümde en çok kullandığım araçları tanıtacağım.
Bu araçlar, günlük iş akışınızı hızlandırır. Özellikle Windows Terminal ve VS Code, modern geliştirici deneyiminin vazgeçilmez parçalarıdır.
Windows Terminal ve PowerShell ile SSH Bağlantısı
Windows Terminal, Microsoft’un modern terminal emülatörüdür. Sekmeli yapısı, özelleştirilebilir temaları ve hızlı render motoruyla öne çıkar.
Windows Terminal’den SSH bağlantısı kurmak için yeni bir sekme açıp şu komutu yazmanız yeterlidir:
ssh kullanici@sunucu-ipBen Windows Terminal’de sık kullandığım sunucular için profil oluşturuyorum. Böylece tek tıkla bağlantı kurabiliyorum. Profil oluşturmak için settings.json dosyasına şu bloğu ekleyin:
{
"name": "Üretim Sunucusu",
"commandline": "ssh kullanici@10.0.1.50",
"icon": "ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png",
"hidden": false
}PowerShell üzerinden SSH bağlantısı da aynı derecede kolaydır. Hatta PowerShell 7.7 ile birlikte SSH üzerinden uzak PowerShell oturumu açabilirsiniz. PowerShell Remoting over SSH özelliği, WinRM’e alternatif olarak giderek popülerleşiyor.
Bu özelliği kullanmak için istemci ve sunucu tarafında birkaç yapılandırma gerekir. İlk olarak sunucuda sshd_config dosyasına şu satırı ekleyin:
Subsystem powershell pwsh.exe -sshs -NoLogoArdından istemcide New-PSSession -HostName sunucu -UserName kullanici komutuyla uzak oturum açabilirsiniz. Bu yöntem, özellikle bulut ortamlarında WinRM portunu açmak istemeyenler için idealdir.
Ben CI/CD pipeline’larımda PowerShell Remoting over SSH kullanıyorum. Çünkü WinRM’e göre daha hafif ve güvenli. Ayrıca Linux tabanlı build ajanlarından da sorunsuz çalışıyor.
PuTTY ile Windows SSH Sunucuya Bağlanma
PuTTY, Windows dünyasının en klasik SSH istemcisidir. Hafif yapısı ve zengin özellikleriyle hâlâ popülerliğini koruyor.
PuTTY dışında SecureCRT gibi alternatif SSH istemcileri de var. Kurumsal ekipler bu aracı güvenlik nedeniyle sık kullanıyor. Gelişmiş oturum yönetimi ve güçlü şifreleme desteği sunuyor.
Adım 1
Öncelikle putty.exe dosyasına çift tıklayarak programı açın. Kurulum gerektirmez, taşınabilir bir araçtır.

Adım 2
Putty programını açtıktan sonra VM’nin (OpenSSH Server) IP adresini yazarak OK’layın.

Adım 3
OpenSSH Server’a bağlantıyı sağladığınızı aşağıdaki görüntüden inceleyebilirsiniz.

Adım 4
Sanal makinede oluşturduğunuz SSHUser kullanıcı adını yazın.

Adım 5
SSHUser’ın parolasını yazın ve Enter tuşuna basın.

Adım 6
SSH Server’a Putty kullanarak başarıyla bağlantı kurdunuz!

Adım 7
Sunucunun bilgisayar adını öğrenmek için “hostname” komutunu uygulayın.

Adım 8
Ayrıca OpenSSH Server üzerinden Hostname değerini kontrol edebilirsiniz.

Adım 9
Sunucuda yeni bir klasör oluşturmak için “md KlasörAdı” komutunu çalıştırın.

Adım 10
Sanal makineye gidin. Ardından C: sürücüsünü kontrol ederek yeni klasör oluşturduğunuzu doğrulayın.

VS Code Remote-SSH, WinSCP ve Git Entegrasyonu
Visual Studio Code, Remote-SSH eklentisiyle uzak sunuculardaki dosyaları doğrudan düzenlemenizi sağlar. Bu eklenti, SSH üzerinden bağlanıp uzak dosya sistemini yerel gibi gösterir.
Remote-SSH kullanmak için:
- VS Code’u açın ve Extensions sekmesinden
Remote - SSHeklentisini kurun. F1tuşuna basıpRemote-SSH: Connect to Hostkomutunu çalıştırın.- Bağlanmak istediğiniz sunucunun adresini girin.
- VS Code, SSH bağlantısını kurar ve uzak dosya sistemini açar.
WinSCP ise güvenli dosya transferi için en popüler grafik arayüzdür. SFTP ve SCP protokollerini destekler. Ayrıca dosya senkronizasyonu ve betikleme özellikleri sunar.
WinSCP ile Windows SFTP sunucunuza bağlanmak için:
- WinSCP’yi açın ve New Session sekmesine geçin.
- Protokol olarak SFTP seçin.
- Sunucu adresini, port numarasını, kullanıcı adını ve anahtar dosyanızı belirtin.
- Login butonuna basın.
Git entegrasyonu için ise GitHub, GitLab ve Bitbucket gibi platformlar SSH anahtarlarını destekler. ssh-keygen ile oluşturduğunuz genel anahtarı GitHub hesabınıza ekleyerek parolasız git işlemleri yapabilirsiniz.
Ben günlük iş akışımda bu üç aracı birlikte kullanıyorum. VS Code ile kod yazıp WinSCP ile dosya transferi yapıyorum. Ayrıca Git ile sürüm kontrolü sağlıyorum. Hepsi aynı SSH anahtarı üzerinden çalışıyor.
SSH Bağlantısı Hakkında İleri Okuma Kaynakları
Bu rehberde anlattıklarımı derinleştirmek isterseniz aşağıdaki kaynaklara mutlaka göz atın. Bu kaynaklar, konunun resmi ve akademik düzeydeki en güvenilir referanslarıdır.
- Microsoft Learn — OpenSSH for Windows Overview: Microsoft’un resmi OpenSSH dokümantasyonu. Kurulum, yapılandırma ve sorun giderme konularında en güncel bilgileri içerir.
- OpenSSH Official Release Notes: OpenSSH’ın resmi sürüm notları. Post-kuantum kriptografi ve güvenlik düzeltmeleri hakkında birinci elden bilgi almak için takip edin.
- GitHub — PowerShell/Win32-OpenSSH: Windows için OpenSSH’ın resmi GitHub deposu. En son sürümleri, MSI paketlerini ve topluluk tartışmalarını burada bulabilirsiniz.
Windows’ta OpenSSH Server SSS
Windows Server 2025’te SSH varsayılan olarak kurulu mu?
Windows’ta SSH portu nasıl değiştirilir?
Permission denied (publickey) hatası nasıl çözülür?
0x800F0954 hatası WSUS ortamında nasıl çözülür?
Windows’ta SSH anahtarı nasıl oluşturulur ve kullanılır?
Windows SSH sunucusu otomatik nasıl başlatılır?
Windows’ta SFTP sunucusu nasıl kurulur?
OpenSSH nasıl güncellenir?
Sonuç: Windows 10, 11 ve Server’da Güvenli ve Otomasyona Hazır SSH Altyapısı
İşte bu kadar. Windows’ta SSH Server kurulumu sürecini baştan sona ele aldık. Artık Windows 10, 11 ve Server 2022/2025 sistemlerinizde güvenli bir SSH altyapısı kurabilirsiniz.
Unutmayın: SSH sadece bir kurulum işlemi değildir. Sürekli bakım ve güvenlik güncellemesi gerektirir. Özellikle post-kuantum kriptografi gibi yeni gelişmeleri takip etmelisiniz.
Ben yıllardır Windows ortamlarında SSH kullanıyorum. RDP’ye kıyasla çok daha hafif, güvenli ve otomasyona uygun. Özellikle DevOps süreçlerinde SSH vazgeçilmezdir.
Siz de bu rehberdeki adımları takip ederek kendi güvenli SSH altyapınızı kurabilirsiniz. Herhangi bir adımda takılırsanız ssh -vvv çıktısını incelemekten çekinmeyin. Bu çıktı, sorunun kaynağını gösterecektir.
Şimdi sıra sizde. Kendi sunucunuzda SSH Server kurulumu yapın ve güvenli uzaktan yönetimin keyfini çıkarın. Kolay gelsin!

İlk yorumu sen paylaş