Windows'ta SFTP (SSH FTP) Sunucusunu Yapılandırma


SFTP (Güvenli FTP) protokolünü kullanarak istemci ile Windows sunucusu arasında güvenli dosya aktarımlarını kolayca etkinleştirmek için Windows'ta yerleşik OpenSSH paketini kullanabilirsiniz. Bu yazıda, Windows 10 veya Windows Server 2022/2019/2016/2012R2 üzerinde bir SFTP sunucusunun nasıl kurulacağını ve yapılandırılacağını göstereceğiz.

SFTP (Güvenli Dosya Aktarım Protokolü, Güvenli FTP veya SSH FTP) UNIX/Linux sistemleri dünyasında standart olan SSH protokolünün uzantısı. Kullanıcı açısından FTP'ye benzer, ancak aslında FTP ile hiçbir ortak yanı olmayan tamamen farklı bir protokoldür. İstemci ve sunucu arasındaki veriler, bir SSH tüneli (TCP bağlantı noktası 22) aracılığıyla 22 numaralı bağlantı noktasından iletilir.

SFTP'nin ana avantajları:

  • Dosyalar ve komutlar, güvenli bir SSH oturumunda aktarılır;

  • Hem dosyaları hem de komutları göndermek için bir bağlantı kullanılır;

  • Sembolik bağlantılar, aktarımı kesme/devam ettirme, dosya silme işlevleri vb. desteklenir;

  • SFTP bağlantısı, FTP'nin yavaş veya kesintili olduğu WAN bağlantılarında çok daha hızlı ve daha güvenilirdir;

  • SSH anahtarlarını kullanarak kimlik doğrulama imkanı.

SFTP ve FTPS protokollerini karıştırmayın. FTPS aslında SSL sertifikasına sahip basit bir FTP'dir ve SFTP, FTP verilerini ve komutlarını SSH oturumu içinde aktarma protokolüdür.

OpenSSH'nin win32 bağlantı noktası (Win32-OpenSSH), Windows'un tüm modern sürümlerinde varsayılan olarak yerleşiktir. Core FTP, FileZilla, CYGWIN, FTP Shell, IPSwitch, vb. gibi üçüncü taraf ürünleri kullanmak yerine güvenli bir SFTP sunucusu yapılandırmak için kullanabilirsiniz.

Windows'ta OpenSSH Nasıl Kurulur?

OpenSSH paketi, İsteğe Bağlı Özellik olarak Windows 10 (1803'ten itibaren), Windows 11 ve Windows Server 2022/2019'un (RSAT gibi) modern yapılarındaki işletim sisteminin bir parçasıdır.

Windows'un bu sürümlerinde OpenSSH sunucusunu PowerShell kullanarak yükleyebilirsiniz:

Add-WindowsCapability -Online -Name OpenSSH.Server*

Veya DISM kullanarak:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

Ayrıca OpenSSH sunucusunu Windows 10 GUI'den yükleyebilirsiniz (Ayarlar -> Uygulamalar -> İsteğe Bağlı Özellikler -> Özellik ekle< -> SSH Sunucusunu Aç -> Yükle).

Bir paketin kurulu olup olmadığını kontrol etmek için:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
  • OpenSSH yürütülebilir dosyaları şu dizinde bulunur:

    c:\windows\system32\OpenSSH\

    ;

  • sshd_config yapılandırma dosyası şurada bulunur:

    C:\ProgramData\ssh

    (bu dizin, sshd hizmetinin ilk başlangıcından sonra oluşturulur);

  • Log dosyası:

    c:\windows\system32\OpenSSH\logs\sshd.log

    ;

  • Authorized_keys dosyası ve anahtarlar bir dizinde saklanır:

    %USERPROFILE%\.ssh\

Windows 10, Windows 8.1'in önceki sürümlerinde ve Windows Server 2016/2012 R2'de, Windows için Win32-OpenSSH'yi GitHub'dan indirmeniz ve manuel olarak kurmanız gerekir (https://github.com/PowerShell/Win32- OpenSSH/sürümler). Windows x64 için bir sürüme ihtiyacımız var: OpenSSH-Win64.zip (4,15 MB).

  1. Arşivi hedef klasöre çıkarın: C:\OpenSSH-Win;

  2. Yükseltilmiş bir PowerShell istemi açın ve OpenSSH klasörüne geçin:

    Cd C:\OpenSSH-Win
  3. OpenSSH dizinine giden yolu Path ortam değişkenine ekleyin (Sistem Özellikleri -> Gelişmiş sekmesi -> Ortam Değişkenleri -> Path sistem değişkenini seçin ve düzenleyin -> Ekle OpenSSH klasörü yolu);

  4. OpenSSH sunucusunu kurun:

    .\install-sshd.ps1

    (“sshd ve ssh-agent hizmetleri başarıyla yüklendi ” şeklinde yeşil bir mesaj görünmelidir);

    Bilgisayarınızda PowerShell betiklerinin çalıştırılması PowerShell Yürütme İlkeniz tarafından engelleniyorsa, betiği şu komutla çalıştırabilirsiniz:

    powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1

OpenSSH Kullanarak Windows'ta SFTP Sunucusu Nasıl Yapılandırılır?

Şimdi Windows'ta OpenSSH'yi SFTP modu için yapılandırmanız gerekiyor.

SSHD hizmeti için otomatik başlatmayı etkinleştirin ve aşağıdaki PowerShell hizmet yönetimi komutlarını kullanarak başlatın:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

Gelen SSH trafiği için Windows Güvenlik Duvarı'nda TCP bağlantı noktası 22'yi açmak için PowerShell'i kullanın:

 New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH

Not. Önceki komut, eski masaüstü Windows sürümlerinde çalışmaz. Bu durumda başka bir komut kullanılır:

 netsh advfirewall firewall add rule name='SSH Port' dir=in action=allow protocol=TCP localport=22

SSHD yapılandırma dosyasını açın (

C:\ProgramData\SSH\sshd_config

) herhangi bir metin düzenleyicide. Subsystem sftp yönergesinin değerini bulun ve kontrol edin. sftp-server.exe dosyası burada belirtilmelidir.

Ayrıca sshd_config yapılandırma dosyasında aşağıdaki parametreleri de yapılandırabilirsiniz:

# only allow users in this domain group to connect to OpenSSH
AllowGroups corp\sftp_users
# enable password authentication (SSH keys cannot be used)
AuthenticationMethods password
#default (chrooot) directory for SFTP users  (by default, the user connects to the directory with his profile in the C:\users\username folder)
ChrootDirectory C:\SFTP
ForceCommand internal-sftp
#You can set an individual chrootdirectory for each user:
Match User abrown
ChrootDirectory c:\SFTP\abrown
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

Match User jsmith
ChrootDirectory c:\SFTP\jsmith
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no

WinSCP veya PowerShell Kullanarak SFTP Sunucusuna Bağlanma

Artık Windows SSH sunucunuza SFTP protokolünü kullanarak bağlanabilirsiniz. Ardından, ücretsiz WinSCP istemcisini, PowerShell konsolunu ve yerleşik sftp.exe<'yi kullanarak bir SFTP sunucusuna nasıl bağlanacağınızı göstereceğiz. aracı.

Bağlantı yapılandırma penceresinde, dosya aktarım protokolü olarak SFTP'yi seçin, sunucu adını ve Windows hesabının kimlik bilgilerini belirtin (kullanın

user@domain

bağlantı için kullanılan (ortak anahtar kimlik doğrulamasını yapılandırmak da mümkündür).

İlk kez bağlanmaya çalıştığınızda, yerel önbellekte bulunmayan ana bilgisayar anahtarına ilişkin aşağıdaki bildirim görüntülenir.

Her şey doğru yapılandırılmışsa, bir istemci SFTP sunucusuna bağlanmalı ve kullanıcının ana chroot dizinindeki (varsayılan olarak, kullanıcının profil dizini) dosyaların listesini göstermelidir.

Tanıdık dosya yöneticisi arabirimini (Total Commander gibi) kullanarak, güvenli SFTP protokolünü kullanarak sunucu ve istemci arasında dosya kopyalayabilirsiniz.

PowerShell'den bir SFTP sunucusuna bağlanmak için Posh-SSH modülünü kullanabilirsiniz. Modülü PowerShell Galerisi'nden veya çevrimdışı olarak indirip yükleyebilirsiniz:

Install-Module -Name Posh-SSH

SFTP sunucusuna bir parola kullanarak bağlanmak için Get-Credential yoluyla kullanıcı adını ve parolayı almanız gerekir:

$usrCreds= Get-Credential

Bir Windows Kimlik Bilgisi Yöneticisinden veya harici kasadan (KeePass, HashiCorp Vault, Azure Key Vault, Bitwarden vb.) kaydedilmiş bir parolayı güvenli bir şekilde almak için PowerShell SecretManagement modülünü kullanabilirsiniz.

Artık SFTP sunucunuza bağlanabilirsiniz:

$SFTPSession = New-SFTPSession -ComputerName 192.168.3.20 -Credential $usrCreds

Artık SFTP sunucusundaki uzak dizindeki dosyaları listeleyebilirsiniz. Bu örnekte, kullanıcının Masaüstündeki dosyaların bir listesini alacağım (bu durumda kullanıcının profili kök kullanıcı klasörü/chroot olacaktır)

Get-SFTPChildItem -SFTPSession $SFTPSession -Path "desktop" -Recurse

Uzak bir SFTP sunucusundan bir dosya indirin:

Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\PS

Bilgisayarınızdan uzak bir SFTP ana bilgisayarına dosya yüklemek için:

Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\PS\mytestfile.log -Destination "desktop"

SFTP oturumunu kapatın:

Remove-SFTPSession -SFTPSession $SFTPSession

Windows'ta, bir SFTP sunucusuna bağlanmak için yerleşik sftp.exe konsol komutunu (OpenSSH istemcisiyle yüklenir) kullanabilirsiniz.

sftp sunucusuna bağlanın:

sftp user1@192.168.3.20

ssh özel anahtarını kullanarak bağlanın:

sftp -i .ssh/id_rsa user1@192.168.3.20

Uzak bir dizindeki dosyaları listeleyin:

pwd

Dosyayı SFTP'den bilgisayarınızdaki yerel bir dizine indirin:

get download_this_file_from_sftp.txt

Bilgisayarınızdan bir SFTP sunucusuna bir dosya yükleyin:

put file_to_uplodad.txt

Oturumu kapat:

exit

SFTP Genel Anahtar Kimlik Doğrulamasını Yapılandırma

Windows'ta SFTP anahtarı tabanlı kimlik doğrulamayı etkinleştirebilirsiniz. Bu durumda, parola girmeden SFTP sunucusunda kimlik doğrulaması yapabilirsiniz.

SSH anahtarı tabanlı kimlik doğrulamanın nasıl kurulacağı hakkında daha fazla bilgi için bu makaleye göz atın.

  1. Sunucuya bağlanacağınız kullanıcı için bilgisayarınızda (SFTP istemcisi) SSH anahtarları oluşturun:

    ssh-keygen -t ed25519

  2. ssh-keygen aracı id_ed25519 (istemci bilgisayar için özel anahtar) ve id_ed25519.pub (SFTP sunucusu için genel anahtar) olmak üzere iki dosya oluşturacaktır;

  3. Şimdi SSH anahtarınızı Windows sunucusuna (SFTP ana bilgisayarı) eklemeniz gerekiyor. id_ed25519.pub dosyasını (veya anahtar tipine göre id_rsa.pub) SFTP'ye bağlanacağınız kullanıcı profilinin .ssh dizinine kopyalayın. Dosyayı yetkili_anahtarlar olarak yeniden adlandırın (örneğin, kullanıcı için aşağıdaki anahtar dosyası kullanılır)

    max1
    C:\Users\max1\.ssh\authorized_keys

    )

Şimdi kullanabilirsiniz

id_ed25519

SFTP sunucusunda kimlik doğrulaması için dosya. Anahtarınızı WinSCP ayarlarında ayarlayabilirsiniz (Gelişmiş -> SSH bağlantı ayarlarına > Kimlik Doğrulama sayfası -> Özel anahtar dosyasına).

PowerShell'den SFTP'ye bağlanırken bir SSH anahtarı kullanmak istiyorsanız aşağıdaki komutu kullanın:

New-SFTPSession -ComputerName 192.168.3.20 -Credential remoteuser1 -KeyFile C:\Users\max1\.ssh\id_ed25519" -Verbose

İlgili makaleler