Установка і настройка SFTP сервера (SSH FTP) в Windows на базі OpenSSH

За допомогою офіційного пакета OpenSSH для Windows ви можете з легкістю організувати безпечний обмін файлами між клієнтом і серверів Windows по захищеному протоколу передачі файлів SFTP (Secure FTP). У цій статті ми покажемо, як за допомогою Win32-OpenSSH встановити SFTP сервер на Windows 10 або Windows Server 2016 / 2012R2.

зміст:

  • Особливості протоколу SFTP
  • Реалізація SFTP в системах Windows
  • Установка Win32 OpenSSH в Windows 10 1803 + / Windows Server 2019
  • Установка Win32 OpenSSH на Windows Server 2016/2012 R2
  • Тестуємо SFTP підключення за допомогою WinSCP
  • Видалення служби Win32 OpenSSH

Особливості протоколу SFTP

протокол SFTP (Secure File Transfer Protocol , Secure FTP або SSH FTP) Це розширення протоколу SSH, що є стандартом світу UNIX / Linux систем. Хоча з точки зору користувачів він схожий на FTP, але насправді це абсолютно інший протокол, який не має з FTP нічого спільного. Дані між клієнтом і сервером передаються по порту 22 через SSH тунель.

Основні переваги протоколу SFTP:

  • Передача файлів і команд відбувається всередині захищеної SSH-сесії;
  • Для передачі файлів і команд використовується одне з'єднання;
  • Підтримка символічних посилань, функцій переривання, поновлення передачі, видалення файлу тощо;
  • Як правило, на каналах, де FTP працює повільно або з перебоєм, SFTP-з'єднання працює більш надійно і швидко;
  • Можливість аутентифікації за допомогою SSH ключів.
Не потрібно плутати протоколи SFTP і FTPS. FTPS - це по суті звичайний FTP з SSL сертифікатом, а SFTP - це передача FTP даних і команд всередині SSH.

Реалізація SFTP в системах Windows

Історично в операційних системах Windows відсутні вбудовані засоби для організації захищеного SFTP сервера. Для цих цілей зазвичай використовувалися відкриті або комерційні рішення, наприклад, Core FTP, FileZilla, CYGWIN, OpenSSH, FTP Shell, IPSwitch тощо. Однак кілька років тому Microsoft випустила свою версію порту OpenSSH для win32. Даний проект називається Win32-OpenSSH.

Розглянемо процес налаштування SFTP сервера в Windows 10 і Windows Server 2016/2012 R2 за допомогою пакета Win32-OpenSSH.

Установка Win32 OpenSSH в Windows 10 1803 + / Windows Server 2019

У Windows 10, починаючи з билда 1803, і ​​в Windows Server 2019 пакет OpenSSH (як і RSAT) вже включений в операційну систему у вигляді Feature on Demand (FoD).

У Windows 10 і Windows Server 2019 ви можете встановити сервер OpenSSH за допомогою командлета PowerShell:

Add-WindowsCapability -Online -Name OpenSSH.Server *

Або за допомогою DISM:
dism / Online / Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

Або можна встановити OpenSSH з графічного інтерфейсу Windows 10 (Settings -> Apps -> Optional Features -> Add a feature -> Open SSH Server -> Install).

Виконувані файли OpenSSH знаходяться в каталозі:

c: \ windows \ system32 \ OpenSSH \

Конфігураційний файл sshd_config знаходиться в каталозі C: ​​\ ProgramData \ ssh (каталог створюється після першого запуску служби).

Лог - c: \ windows \ system32 \ OpenSSH \ logs \ sshd.log

Файл authorized_keys і ключі зберігаються в каталозі% USERPROFILE% \. Ssh \.

Детальніше про використання OpenSSH для підключення до Windows 10 / Windows Server 2019 по захищеному SSH тунелю.

Установка Win32 OpenSSH на Windows Server 2016/2012 R2

У попередніх версіях Windows 10 і в Windows Server 2016/2012 R2 ви повинні завантажити та встановити OpenSSH з GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases). Нам потрібна версія для 64 бітної версії Windows: OpenSSH-Win64.zip (3,5 Мб).

  1. Розпаковуємо вміст архіву у папку, наприклад: C: \ OpenSSH-Win
  2. Запускаємо командний рядок PowerShell з правами адміністратора і переходимо в каталог OpenSSH:Cd C: \ OpenSSH-Win
  3. Додайте шлях до каталогу OpenSSH в змінну оточення Path;
  4. Встановіть сервер OpenSSH: .\ Install-sshd.ps1 (Має з'явитися зелене повідомлення "sshd and ssh-agent services successfully installed");
  5. Згенеруйте SSH ключі для сервера (потрібні для запуску служби sshd):ssh-keygen.exe -A 
    ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519

    При появі помилки

     ssh-keygen: generating new host keys: RSA Could not save your public key in __PROGRAMDATA __ \\ ssh / ssh_host_rsa_key.bxKmOcF49P: No such file or directory

    , переконайтеся, що створено каталог% programdata% \ ssh.

  6. Увімкніть автозапуск для служби SSHD і запустіть її за допомогою наступних PowerShell команд управління службами:Set-Service -Name sshd -StartupType 'Automatic'
    Start-Service sshd
  7. З помошью PowerShell відрийте в брандмауері Windows порт TCP 22 для вхідного трафіку на SSH сервер:New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
  8. Відкрийте в будь-якому текстовому редакторі конфігураційний файл "C: \ ProgramData \ SSH \ sshd_config», знайдіть і перевірте значення директиви Subsystem sftp. Тут повинен бути вказаний файл sftp-server.exe. Розглянемо корисні директиви в файлі конфігурації sshd_config:
    AllowGroups corp \ admingroup # дозволити підключення до OpenSSH тільки для користувачів з цієї групи AuthenticationMethods password # включити аутентифікацію за паролем (можна використовувати ключі SSH) ForceCommand internal-sftp # ChrootDirectory C: \ inetpub \ wwwroot \ ftpfolder # каталог по-умолчнаію для SFTP користувачів 

Тестуємо SFTP підключення за допомогою WinSCP

Спробуємо підключитися до піднятого нами SSH сервера по протоколу SFTP. Для цих цілей скористаємося вільним клієнтом WinSCP.

У вікні настройки підключення виберіть протокол передачі файлів SFTP, вкажіть ім'я сервера і дані облікового запису Windows, під якою здійснюється підключення (можливо також налаштувати авторизацію по ключам).При першому підключенні з'явиться вікно з попередженням про те, що ключ хоста відсутня в локальному кеші.

Якщо все налаштовано правильно, клієнт повинен підключитися до SFTP сервера і відобразити список файлів в домашньому каталозі користувача (за умовчанням каталог з профілем користувача).

За допомогою звичного інтерфейсу файлового менеджера можна безпечно копіювати файли між сервером і клієнтом. Передача файлів буде здійснюватися по захищеному протоколу SFTP.

Видалення служби Win32 OpenSSH

Щоб коректно видалити службу Win32 OpenSSH з системи:

  1. Відкриємо консоль Powershell з правами адміністратора
  2. Зупинимо службу SSHD:Stop-Service sshd
  3. Видалимо службу OpenSSD: видалимо ключі:.\ Uninstall-sshlsa.ps1
    sshd successfully uninstalled ssh-agent successfully uninstalled