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

Bu listede hem OpenSSH.Client hem de OpenSSH.Server yer alır . Özellikle OpenSSH.Server'ın durumunu kontrol ettiğinizden emin olun; istemci bileşeni zaten yüklü olabilir ve bu kılavuzda ele alınmamaktadır.
OpenSSH.Server'ın Durumu: NotPresent olarak görünüyorsa, bunu yükleyin:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Windows, yerleşik OpenSSH Sunucu özelliğini C:\Windows\System32\OpenSSH\ konumuna yükler. OpenSSH'yi doğrudan C:\Windows konumuna manuel olarak yüklemeyin; bu, Windows dizin kurallarını ihlal eder ve izin sorunlarına neden olabilir.
3. sshd hizmetini başlatın ve otomatik olarak başlaması için ayarlayın:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4. Hizmetin çalıştığını doğrulayın:
Get-Service sshd

Durum alanında Çalışıyor yazmalıdır. Ayrıca, başlangıç türünün Otomatik olarak ayarlandığını da doğrulayın:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

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

Kaynak 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ı açma
Varsayılan olarak, OpenSSH Sunucu özelliğinin yüklenmesi normalde OpenSSH-Server-In-TCP adlı bir gelen güvenlik duvarı kuralını otomatik olarak oluşturur. Bu kuralın mevcut ve etkin olduğunu doğrulayın:
Get-NetFirewallRule -Name *OpenSSH-Server*

Kural yoksa, manuel olarak oluşturun (kural adının farklı olduğuna dikkat edin; manuel olarak 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 ve dinleme durumunda olduğunu doğrulayın:
Test-NetConnection -ComputerName localhost -Port 22

TcpTestSucceeded : True sonucu, hizmetin yerel olarak dinleme halinde olduğunu doğrular. Bu, güvenlik duvarının dışarıdan gelen trafiği geçirdiğini doğrulamaz; tam olarak doğrulamak için, ağdaki farklı bir makineden aynı komutu çalıştırın ve localhost yerine sunucunun IP adresini kullanın.
SFTP için sshd_config dosyasını yapılandırma
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, Not Defteri'ni Yönetici olarak çalıştırın) ve aşağıdaki ayarların mevcut olduğunu (veya gerektiği gibi yapılandırıldığını) doğrulayın:
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Bu kılavuzu basit tutmak amacıyla buradaPasswordAuthentication yes 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.
Subsystem sftp satırı, SFTP oturumlarını hangi ikili dosyanın işleyeceğini tanımlar. Bu satır mevcut ve yorum satırı kaldırılmış değilse, 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 yorum satırı kaldırılmıştır. Eğer eksikse veya # ile yorumlanmışsa, ekleyin veya yorum satırını kaldırın, ardından dosyayı kaydedin.
Daha yeni OpenSSH sürümleri, harici bir ikili dosyayı çağırmayan yerleşik bir işleyici olan Subsystem sftp internal-sftp'yi de destekler:
Subsystem sftp internal-sftp
Hem sftp-server.exe hem de internal-sftp çalışır; bu kılavuzda, varsayılan olarak gelen değer olduğu için sftp-server.exe kullanılmaktadır.
sshd_config dosyasında isteğe bağlı olarak eklemek isteyebileceğiniz ayarlar:
# Default value, already set; shown here for reference if key-based authentication isn't working # AuthorizedKeysFile .ssh/authorized_keys # Restrict access to specific users (optional) # AllowUsers username1 username2 # Logging SyslogFacility LOCAL0 LogLevel INFO
Yerel Administrators grubunun üyesi olan hesaplar için, OpenSSH'nin Windows sürümü, kullanıcının profilindeki .ssh\authorized_keys dosyası yerine C:\ProgramData\ssh\administrators_authorized_keys dosyasını kullanır. 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 herhangi bir değişiklik yaptıktan sonra, değişikliğin uygulanması için hizmeti yeniden başlatın:
Restart-Service sshd
WinSCP kullanarak SFTP bağlantısını kontrol etme
Ücretsiz WinSCP istemcisini yükleyin ve çalıştırın . Bağlantı ayarları penceresinde SFTP dosya aktarım protokolünü seçin, Sunucu adı alanına sunucunun ana bilgisayar adını veya IP adresini girin, Bağlantı noktası numarası alanını 22 olarak bırakın (farklı bir bağlantı noktası yapılandırmadıysanız) ve bağlanacağınız Windows hesabının kimlik bilgilerini girin.

Her şey doğru şekilde ayarlanmış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\<kullanıcı adı> konumuna yönlendirilir. Ardından dosyalar, SFTP protokolü üzerinden sunucu ve istemci arasında güvenli bir şekilde aktarılabilir.

OpenSSH Sunucu özelliğini kaldırma
1. PowerShell'i Yönetici olarak başlatın.
2. Özelliği kaldırmadan önce sshd hizmetini durdurun; hizmet hala çalışırken veya aktif olarak kullanılırken özelliğin kaldırılması, işlemin başarısız olmasına veya donmasına neden olabilir:
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 işlem, varsa hem otomatik olarak oluşturulan hem de manuel olarak oluşturulan kuralları 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ırmayı kaldırma: Yalnızca yapılandırma dosyasını kaldırabilir veya ana bilgisayar anahtarlarını da içeren 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ını da içeren tam bir temizlik için, bunun yerine tüm yapılandırma klasörünü kaldırın:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Klasörün tamamını kaldırmak, sunucunun ana bilgisayar anahtarlarını da kalıcı olarak siler. Yeniden kurulumdan sonra bağlanan istemciler, sunucuyu yeni ve tanınmayan bir SSH ana bilgisayarı olarak algılar. Bunu yalnızca, daha sonra OpenSSH Sunucusunu aynı yapılandırmayla yeniden kurmayı planlamıyorsanız yapın.