Windows'ta OpenSSH tabanlı bir SFTP sunucusunu yükleme, test etme ve kaldırma
Bu kılavuz, OpenSSH Server'ı yerleşik bir isteğe bağlı özellik olarak içeren Windows Server 2019, 2022 ve 2025 için geçerlidir. Üçüncü taraf bir indirme gerekmez.
Adım adım kılavuz
OpenSSH Server özelliğinin kurulması
1) PowerShell'i yönetici olarak başlatın: Başlat, "PowerShell" yazın → "PowerShell" üzerine sağ tıklayın → Yönetici olarak çalıştır.
2) OpenSSH Server özelliğinin zaten kurulu olup olmadığını kontrol edin:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Not: Burada hem OpenSSH.Client hem de OpenSSH.Server listelenir. Özellikle OpenSSH.Server'ın durumunu kontrol ettiğinizden emin olun, istemci bileşeni zaten kurulu olabilir ve bu kılavuzun konusu değildir.
OpenSSH.Server, State : NotPresent durumunu gösteriyorsa kurun:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Not: Windows, yerleşik OpenSSH Server özelliğini C:\Windows\System32\OpenSSH\ konumuna kurar. OpenSSH'ı doğrudan C:\Windows içine elle kurmayın, bu Windows dizin kurallarını ihlal eder ve izin sorunlarına yol açabilir.
3) sshd hizmetini başlatın ve otomatik olarak başlayacak şekilde ayarlayın:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4) Hizmetin çalıştığını doğrulayın:
Get-Service sshd

Status alanı Running göstermelidir. Başlangıç türünün Automatic olarak ayarlandığını da doğrulamak için:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5) Kurulu OpenSSH ikili dosyasının konumunu ve sürüm bilgilerini kontrol edin:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

Source alanı, kurulum yolunun C:\Windows\System32\OpenSSH\sshd.exe ile eşleştiğini doğrular; FileVersionInfo, OpenSSH sürümünü gösterir (örneğin, Windows Server 2022'de OpenSSH_8.1p1, FileVersion 8.1.0.1).
Güvenlik duvarı bağlantı noktasının açılması
Varsayılan olarak, OpenSSH Server özelliğinin kurulması normalde OpenSSH-Server-In-TCP adında bir gelen güvenlik duvarı kuralını otomatik olarak oluşturur. Var olduğunu ve etkin olduğunu doğrulayın:
Get-NetFirewallRule -Name *OpenSSH-Server*

Kural yoksa, elle oluşturun (farklı kural adına dikkat edin, elle oluşturulan bu kural, otomatik olarak oluşturulan OpenSSH-Server-In-TCP kuralından ayrıdır):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Bağlantı noktasının gerçekten açık olduğunu ve dinlediğini doğrulayın:
Test-NetConnection -ComputerName localhost -Port 22

TcpTestSucceeded : True sonucu, hizmetin yerel olarak dinlediğini doğrular. Bu, güvenlik duvarının dışarıdan gelen trafiğe izin verdiğini doğrulamaz, bunu tam olarak doğrulamak için aynı komutu ağdaki başka bir makineden çalıştırın ve localhost yerine sunucunun IP adresini yazın.
SFTP için sshd_config yapılandırması
Yapılandırma dosyası şu konumdadır:
C:\ProgramData\ssh\sshd_config
Dosyayı yönetici haklarıyla bir metin düzenleyicide açın (örneğin, yönetici olarak çalıştırılan Notepad) ve aşağıdaki ayarların mevcut olduğunu doğrulayın (veya gerektiği gibi yapılandırın):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Güvenlik notu: PasswordAuthentication yes, bu kılavuzu basit tutmak için burada gösterilmiştir, ancak internete açık bir üretim sunucusu için PasswordAuthentication no ile anahtar tabanlı kimlik doğrulama daha güvenli bir seçimdir. Anahtar tabanlı kimlik doğrulama kullanmayı planlıyorsanız aşağıdaki isteğe bağlı AuthorizedKeysFile ayarına bakın.
Önemli: Subsystem sftp satırı, SFTP oturumlarını hangi ikili dosyanın işleyeceğini tanımlar. Bu satır mevcut ve açıklama satırı olmadan bulunmazsa, SSH bağlantıları çalışır ancak SFTP dosya aktarımı başarısız olur.
Varsayılan olarak bu satır, yerleşik özelliğin yapılandırma dosyasında zaten mevcuttur ve açıklama satırı değildir. Eksikse veya # ile açıklama satırı haline getirilmişse, ekleyin veya açıklama işaretini kaldırın, ardından dosyayı kaydedin.
Not: Daha yeni OpenSSH sürümleri, harici bir ikili dosya çağırmayan yerleşik bir işleyici olan Subsystem sftp internal-sftp seçeneğini de destekler:
Subsystem sftp internal-sftp
Hem sftp-server.exe hem de internal-sftp çalışır; bu kılavuz, varsayılan olarak sağlanan değer olduğu için sftp-server.exe kullanır.
sshd_config dosyasına eklemek isteyebileceğiniz isteğe bağlı ayarlar:
# Varsayilan deger, zaten ayarli; anahtar tabanli kimlik dogrulama calismiyorsa referans olarak burada gosterilmistir # AuthorizedKeysFile .ssh/authorized_keys # Erisimi belirli kullanicilarla sinirlama (istege bagli) # AllowUsers username1 username2 # Gunlukleme SyslogFacility LOCAL0 LogLevel INFO
Not: Yerel Administrators grubunun üyesi olan hesaplar için, OpenSSH'ın Windows sürümü farklı bir dosya kullanır: kullanıcının profilindeki .ssh\authorized_keys değil, C:\ProgramData\ssh\administrators_authorized_keys. Bir yönetici hesabı için anahtar tabanlı kimlik doğrulama beklendiği gibi çalışmıyorsa, bunun yerine bu dosyayı kontrol edin.
sshd_config dosyasında yapılan her değişiklikten sonra, uygulamak için hizmeti yeniden başlatın:
Restart-Service sshd
WinSCP kullanarak SFTP bağlantısının kontrol edilmesi
Ücretsiz WinSCP istemcisini kurun ve çalıştırın. Bağlantı ayarları penceresinde SFTP dosya aktarım protokolünü seçin, sunucunun ana bilgisayar adını veya IP adresini Host name alanına girin, Port number alanını 22 olarak bırakın (farklı bir bağlantı noktası yapılandırmadıysanız) ve bağlandığınız Windows hesabının kimlik bilgilerini girin.

Her şey doğru yapılandırılmışsa, istemci SFTP sunucusuna bağlanır ve kullanıcının ana dizininin (varsayılan profil dizini) içeriğini görüntüler. Varsayılan olarak kullanıcı C:\Users\<username> konumuna gelir. Dosyalar daha sonra SFTP protokolü üzerinden sunucu ile istemci arasında güvenli bir şekilde aktarılabilir.

OpenSSH Server özelliğinin kaldırılması
1) PowerShell'i yönetici olarak başlatın.
2) Özelliği kaldırmadan önce sshd hizmetini durdurun, hizmet hâlâ çalışırken veya etkin olarak kullanılırken kaldırmak başarısız olabilir veya takılabilir:
Stop-Service sshd
3) Özelliği kaldırın:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4) (İsteğe bağlı) Güvenlik duvarı kuralını kaldırın. Bu, herhangi biri mevcutsa hem otomatik oluşturulan hem de elle oluşturulan kuralı kapsar:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5) (İsteğe bağlı) Yapılandırmanın kaldırılması: yalnızca yapılandırma dosyasını kaldırabilir veya ana bilgisayar anahtarları dahil tam bir temizlik yapabilirsiniz.
Ana bilgisayar anahtarlarına dokunmadan yalnızca sshd_config dosyasını kaldırmak için:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Ana bilgisayar anahtarları dahil tam bir temizlik için, bunun yerine yapılandırma klasörünün tamamını kaldırın:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Uyarı: Klasörün tamamının kaldırılması, sunucunun ana bilgisayar anahtarlarını da kalıcı olarak siler. Yeniden kurulumdan sonra bağlanan istemciler, sunucuyu yeni, tanınmayan bir SSH ana bilgisayarı olarak değerlendirir. Bunu yalnızca OpenSSH Server'ı daha sonra aynı yapılandırmayla yeniden kurmayı planlamıyorsanız yapın.