С помощью встроенного пакета OpenSSH для Windows вы можете легко настроить безопасную передачу файлов между клиентом и серверов Windows по защищенному протоколу передачи файлов SFTP (Secure FTP). В этой статье мы покажем, как установить и настроить установить SFTP сервер в Windows 10/11 или Windows Server 2022/2019/2016/2012R2 с помощью встроенных средств (Win32-OpenSSH).
Содержание:
- Установка OpenSSH в Windows
- Настройка SFTP сервера на базе OpenSSH в Windows
- Подключение к SFTP серверу с помощью PowerShell и WinSCP
- Настройка 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 сессии.
В современные версии Windows по-умолчанию встроен порт OpenSSH для win32 (Win32-OpenSSH). Вы можете использовать его для организации защищенного SFTP сервера вместо таких сторониих продуктов как Core FTP, FileZilla, CYGWIN, OpenSSH, FTP Shell, IPSwitch и пр.
Установка OpenSSH в Windows
Пакет OpenSSH уже включен в операционную систему в современных билдах Windows 10 (начиная с 1803), Windows 11, Windows Server 2022/2019 в виде Feature on Demand (как и RSAT).
В этих версиях Windows вы можете установить сервер 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).
Чтобы проверить, установлен ли пакет:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'
Исполняемые файлы OpenSSH находятся в каталоге:
C:\windows\system32\OpenSSH\
Конфигурационный файл sshd_config находится в каталоге C:\ProgramData\ssh (каталог создается после первого запуска службы).
Лог — c:\windows\system32\OpenSSH\logs\sshd.log
Файл authorized_keys и ключи хранятся в каталоге %USERPROFILE%\.ssh\.
В предыдущих версиях Windows 10, в Windows 8.1 или в Windows Server 2016/2012 R2 вам придется скачать Win32-OpenSSH для Windows с GitHub и установить вручную (https://github.com/PowerShell/Win32-OpenSSH/releases). Нам нужна версия для 64 битной версии Windows: OpenSSH-Win64.zip (4,15 Мб).
- Распакуйте содержимое архива в целевой каталог, к примеру:
C:\OpenSSH-Win
- Запустите командную строку PowerShell с правами администратора и перейдите в каталог OpenSSH:
cd C:\OpenSSH-Win
- Добавьте путь к каталогу OpenSSH в переменную окружения Path;
- Установите сервер OpenSSH:
.\install-sshd.ps1
должно появиться зеленое сообщение “sshd and ssh-agent services successfully installed”).
Настройка SFTP сервера на базе OpenSSH в Windows
Теперь вам нужно настроить OpenSSH для режима SFTP.
Включите автозапуск для службы SSHD и запустите ее с помощью следующих PowerShell команд управления службами:
Set-Service -Name sshd -StartupType ‘Automatic’
Start-Service sshd
С помошью PowerShell отройте в брандмауэре Windows порт TCP 22 для входящего трафика на SSH сервер:
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
Откройте в любом текстовом редакторе конфигурационный файл «C:\ProgramData\SSH\sshd_config», найдите и проверьте значение директивы Subsystem sftp. Здесь должен быть указан файл sftp-server.exe.
Рассмотрим полезные директивы в конфигурационном файле sshd_config:
# разрешить подключение к OpenSSH только для пользователей из этой группы
AllowGroups corp\admingroup
# включить аутентификацию по паролю (нельзя использовать ключи SSH)
AuthenticationMethods password ForceCommand internal-sftp
#каталог для SFTP пользователей (по умолчанию пользователь подключается в каталог со своим профилем в папке C:\users\username)
ChrootDirectory C:\SFTPRoot
#Для каждого пользователя можно индивидуальную chrootdirectory:
Match User user1 ChrootDirectory c:\SFTPRoot\user1 ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no
Match User user2 ChrootDirectory c:\SFTPRoot\user2 ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no
Подключение к SFTP серверу с помощью PowerShell и WinSCP
Теперь вы может подключиться к вашему SSH серверу на Windows по протоколу SFTP. Ниже мы покажем, как подключиться к SFTP серверу с помощью бесплатного клиента клиент WinSCP, консоли PowerShell и встроенной утилиты sftp.exe.
В окне настройки подключения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows (в формате
user@domain
для доменных пользователей), под которой осуществляется подключение (возможно также настроить авторизацию по ключам). При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше.
При первом подключении появится окно с предупреждением о том, что ключ хоста отсутствует в локальном кеше.
Если все настроено правильно, клиент должен подключиться к SFTP серверу и отобразить список файлов в домашнем каталоге пользователя (по умолчанию каталог с профилем пользователя).
С помощью привычного интерфейса файлового менеджера можно безопасно копировать файлы между сервером и клиентом по защищённому протоколу SFTP.
Для подключения к SFTP серверу из PowerShell можно использовать модуль Posh-SSH. Вы можете скачать установить модуль из PowerShell Gallery или офлайн:
Install-Module -Name Posh-SSH
Для подключения к SFTP серверу с помощью пароля, нужно получить имя пользователя и пароль через Get-Credential:
$usrCreds= Get-Credential
Теперь можно подключиться к вашем SFTPS серверу:
$SFTPSession = New-SFTPSession -ComputerName 192.168.13.200 -Credential $usrCreds
Теперь вы можете вывести список файлов в удаленном каталоге на SFTP сервере. В этом примере я получу список файлов на рабочем столе пользователя (профиль пользователя в этом случае будет являться корнем)
Get-SFTPChildItem -SFTPSession $SFTPSession -Path "desktop" –Recurse
Чтобы скачать файл с удаленного SFTP сервера:
Get-SFTPItem -SessionId $SFTPSession.SessionId -Path "desktop/OpenVPNScript.log" -Destination c:\temp
Чтобы закачать файл с вашего компьютера на удаленный SFTP хост:
Set-SFTPItem -SessionId $SFTPSession.SessionId -Path C:\Temp\mytestfile.log -Destination “desktop”
Завершить SFTP сессию:
Remove-SFTPSession -SFTPSession $SFTPSession
В Windows вы можете использоваться встроенную утилиту sftp.exe (устанавливается вместе с клиентом OpenSSH) для подключения к SFTP серверу.
Подключиться к sftp серверу:
sftp [email protected]
Подключиться с помощью ssh ключа:
sftp -i .ssh/id_rsa [email protected]
Вывести список файлов в удаленном каталоге:
pwd
Скачать файл с SFTP в локальный каталог на ваш компьютер:
get file-test1.txt
Загрузить файл с вашего компьютера на SFTP сервер:
put file-test2.txt
Закрыть сессию:
exit
Настройка SFTP аутентификации по ключам
Вы можете настроить SFTP аутентификацию по ключам. В этом случае при подключении к SFTP серверу вам не нужно будет указывать пароль пользователя.
Подробно настройка SSH аутентификации по ключам описана в этой статье.
Для этого нужно:
- Создать на вашем компьютере (SFTP клиент) ключи для пользователя, под которым вы будете подключаться к серверу:
ssh-keygen -t ed25519
- Утилита сгенерирует два файла
id_ed25519
(закрытый ключ для клиента) и
id_ed25519.pub
(открытый ключ для сервера); - Теперь нужно добавить ваш SSH ключ на сервер. Скопируйте файл id_ed25519.pub(или id_rsa.pub в зависимости от типа ключа) в каталог .ssh профиля пользователя, под которым вы будете подключаться к SFTP серверу. Переименуйте файл в authorized_keys (например для пользователя alex путь будет выглядеть так:
C:\Users\alex\.ssh\authorized_keys
)
Теперь вы можете использоваться файл id_ed25519 для аутентификации на SFTP сервере в настройках WinSCP (настройки подключения Advanced -> to SSH > Authentication page -> Private key file).
Если вы хотите задать SSH ключ при подключении к SFTP из PowerShell, используйте такую команду:
New-SFTPSession -ComputerName 192.168.13.200 -Credential user1 -KeyFile C:\Users\alex\.ssh\id_ed25519" -Verbose
В данной инструкции я опишу, как можно настроить простой SFTP-сервер за 2 минуты используя программу Rebex Tiny SFTP Server, без танцев с веб-сервером IIS и прочих тайных обрядов по вызыванию компонентов Windows, которые так любят разработчики компании Microsoft.
Данный SFTP-сервер не требует никаких дополнительных действий или установки дополнительного ПО, а всего лишь настройку и запуск программы, все необходимые минимальные действия для работы SFTP-сервера программа выполняет самостоятельно.
SFTP (Secure File Transfer Protocol) — это протокол, предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения.
Для начала скачайте программу с сайта https://www.rebex.net/tiny-sftp-server/, программа бесплатная, по крайней мере на данный момент (2023).
Распакуйте архив её в любую папку и перейдите в неё,
внутри Вы должны увидеть несколько файлов, нас интересуют только 2 файла:
RebexTinySftpServer.exe.config — файл конфигурации
RebexTinySftpServer.exe — исполняющий файл программы
Для начала пропишем пользователя, пароль и корневой каталог в файл конфигурации:
Нужно заменить строчки:
<add key="userName" value="tester" />
<add key="userPassword" value="password" />
<add key="userRootDir" value="data" />
на следующие:
<add key="userName" value="ftpuser" />
<add key="userPassword" value="FqiJ2l8fZ6cR9oAv" />
<add key="userRootDir" value="C:\" />
Где я указал в качестве имени пользоваля «ftpuser», его пароль: «FqiJ2l8fZ6cR9oAv» и корневую папку «C:\» для подключения.
Обязательно измените эти данные на любые другие в целях безопасности.
Сохраните файл.
Далее откроем порт в файрволле сервера, откройте программу Powershell и введите следующие 2 команды:
netsh advfirewall firewall add rule name="sftp-temporary" action=allow dir=in protocol=TCP localport=22
netsh advfirewall firewall add rule name="sftp-temporary" action=allow dir=in protocol=UDP localport=22
Можно запускать программу RebexTinySftpServer.exe, в окне программы Вы увидите кнопку Start, нажмите её, чтобы запустить SFTP-сервер.
Надпись сменится на надпись Stop, что означает, что SFTP-сервер теперь работает.
Теперь можно подключаться к серверу по SFTP, для примера я буду использовать программу Filezilla, ввожу свои данные (у Вас IP адрес будет отличаться)
Как видно я смог успешно подключиться к серверу.
По завершении копирования файлов и когда Вам подклчюение больше не нужно, просто нажимаем кнопку Stop в проргамме и закрываем её.
В целях безопасности лучше не оставлять данную программу работающей на постоянной основе, а запускать её только когда она необходима.
Также рекомендую после остановки программы закрывать порт, который мы открыли ранее, для этого введите в Powershell следующую команду:
netsh advfirewall firewall delete rule name="sftp-temporary" dir=in
Setup a secure FTP server in your
Cloud Computer
In this tutorial, we will show you how to setup a secure FTP server in your cloud computer. Transferring confidential files from your local PC to your cloud computer can be difficult. That’s why you need a SFTP connection. You can follow this tutorial for smaller files that won’t need a FTP.
STEP 1
Download Rebex Tiny FTP here on your Cloud PC and UNZIP the files with right click and then Extract All.
STEP 2
Open the file RebexTinySftpServer.exe.config with Notepad and edit the text as shown below:
Replace the following words in the document and save
tester = The username of your choice
Password = The password of your choice
22 = 21
NOTE: This is for a public IP address. For a private IP address, you need to go to your dashboard under the tab Networking. Enter port 21 and it will generate a random port number. Replace 22 with the new random port number (55488 in the example below)
false = true
true = false
The final document should look like this:
You can now SAVE the file document. Be sure to write down the username, password and port number for later use.
STEP 3
In the windows search bar, type allow and select the option allow an app through the firewall.
Select Allow another app and then Browse to select Rebex Tiny FTP.
Then check both Public and Private and click OK
STEP 4
Open Rebex Tiny FTP. It should show that the SFTP server has started and is ready to accept connections.
STEP 5
On your local computer, download and install FileZilla. NOTE: you don’t need to install any third party app suggested in the installer.
Once finished, open up Filezilla. You need to complete 4 fields : Host – Username – Password – Port. The Host field is your Virtual Machine DNS address and can be found in your Dashboard as shown here:
Complete the fields and hit Quickconnect
Once connected, navigate to the files you want to transfer – right click – and select upload. The transfer will begin.
NOTES: You need to write port 55488 instead of 21 if you forwarded a port in the previous steps.
In FileZilla, the host field is SFTP://vm123456.cloud.v2cloud.kinsta.cloud .What follows SFTP:// is the address in your dashboard as seen below.
STEP 6
Once done, your files will appear in the folder name data in the same folder you unzipped Rebex Tiny FTP.
You now know how to set up and use a Secure File Transfer Protocol. Feel free to contact support at [email protected] or via the online chat in your Dashboard if you run into any issues.
Back To Tutorials Menu
Content
- Пошаговое руководство
- Проверка SFTP-соединения с помощью WinSCP
- Удаление службы Win32 OpenSSH
Пошаговое руководство
Установка и настройка SFTP-сервера (SSH FTP)
Сначала вам нужно скачать и установить OpenSSH с GitHub:
https://github.com/PowerShell/…
Скачайте архив: OpenSSH-Win64.zip
1) Распакуйте содержимое архива в целевую директорию, например:«C:\Windows«
2) Откройте свойства системы(WIN+R, команда «sysdm.cpl«) -> Дополнительно -> Переменные среды
В появившемся окне есть два раздела: верхний содержит переменные окружения пользователя, нижний — системные переменные.
В системных переменных выберите переменную«Путь«, нажмите кнопку«Изменить…».
3) В открывшемся окне нажмите«New» и введите путь к директории OpenSSH из шага 1, в данном примере:«C:\Windows\OpenSSH-Win64«.
4) Запустите«PowerShell» от имени администратора:
Пуск, введите«PowerShell» → щелкните правой кнопкой мыши на«PowerShell» → Запуск от имени администратора
5) Перейдите в каталог OpenSSH, в данном примере:«C:\Windows\OpenSSH-Win64«.
cd C:\Windows\OpenSSH-Win64
Установите сервер OpenSSH:
(должно появиться зеленое сообщение «службы sshd и ssh-agent успешно установлены»);
.\Install-sshd.ps1
Включите автозапуск для службы SSHD:
Set-Service -Name sshd -StartupType ‘Automatic’
Откройте TCP-порт 22 в брандмауэре Windows для входящего трафика на SSH-сервер:
New-NetFirewallRule -Protocol TCP -LocalPort 22 -Direction Inbound -Action Allow -DisplayName SSH
Настройте владельца файла и права доступа: (На каждый вопрос отвечайте«Y«)
.\FixHostFilePermissions.ps1
6) Откройте список служб(WIN+R, команда«services.msc«) -> Дважды щелкните на«OpenSSH SSH Server» → Установите тип запуска:«Автоматически«, нажмите «Запустить» → OK
Проверка SFTP-соединения с помощью WinSCP
Скачайте и запустите бесплатный клиент WinSCP.
В окне настроек соединения выберите протокол передачи файлов SFTP, укажите имя сервера и данные учетной записи Windows, под которой вы подключаетесь.
Если все настроено правильно, клиент должен подключиться к SFTP-серверу и отобразить список файлов в домашнем каталоге пользователя (каталог по умолчанию с профилем пользователя).
Используя привычный интерфейс файлового менеджера, можно безопасно копировать файлы между сервером и клиентом. Передача файлов будет осуществляться по защищенному протоколу SFTP.
Удаление службы Win32 OpenSSH
Чтобы корректно удалить службу Win32 OpenSSH из системы, выполните следующие действия:
1) Запустите«PowerShell» от имени администратора:
Пуск, введите«PowerShell» → щелкните правой кнопкой мыши на«PowerShell» → Запуск от имени администратора
2) Перейдите в каталог OpenSSH, в данном примере: «C:\Windows\OpenSSH-Win64».
cd C:\Windows\OpenSSH-Win64
3) Остановите службу SSHD:
Stop-Service sshd
4) Деинсталлируйте службу OpenSSD:
.\uninstall-sshd.ps1
You can set up an SFTP server on Windows using PowerShell or third-party tools with a graphical user interface. We’ll cover both methods and explain the requirements for SFTP.
What do I need for a Windows SFTP server?
Before you set up an FTP server, it’s important to first know the difference between FTP and SFTP. Unlike FTP, which sends data in plain text, the SFTP protocol ensures that data is encrypted when it is being transferred. To establish a secure channel for data transfer, you’ll need Secure Shell (SSH), which is provided by the open-source tool OpenSSH.
To connect to the SFTP server, you need to install an SFTP client. You can, for example, use FileZilla. FileZilla has a drag-and-drop file management system and allows you to transfer up to 4 gigabytes of data. It’s important to make sure your system has enough memory to transfer the amount of data you want to transfer. The following minimum system requirements need to be met:
- Processor (CPU): min. 1.6 GHz (Dual core)
- Memory (RAM): 4 GB
- Disk space: depends on data size
- Operating system: Windows
- Software: OpenSSH, SFTP client
- Internet connection: for data transfer
With secure FTP hosting from IONOS, you’ll have access to quick and secure servers with SFTP or FTPS.
Step-by-step instructions for setting up a Windows SFTP server
To install a Windows SFTP server, you need to download OpenSSH and open the corresponding SSH port so that the SFTP server and client can communicate with each other.
Step 1: install OpenSSH
Download the latest version of OpenSSH. This can be done from GitHub. Once you’ve downloaded the latest version, right-click to open PowerShell and select Run as administrator. Then go to the OpenSSH folder:
cd "C: \Program Files\OpenSSH"
bash
Use the command dir
to list the files in the directory.
Step 2: activate SSHD and the SSH agent
Both the SSH daemon and the SSH agent can be installed with a command.
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
bash
Once they have been successfully installed, you can close the PowerShell.
You can manually start the SSH daemon or choose to have it activated with every restart. In Services.msc, you can set it up so that the SSH daemon automatically starts on boot.
Step 3: open an SSH port
SSH uses port 22 as its standard port. Since Windows doesn’t typically come with SSH preinstalled, this port is normally closed. You can manually open it using Windows Firewall. Open Windows Defender Firewall and select New Rule under Inbound Rules.
In the next window, select Port and click on Next.
Select the TCP protocol and set ‘22’ as a port.
In the next window, keep the connection selected and tick the box next to Private under Profile.
You can also add a name for the new rule. In our example, we’ve used the name ‘OpenSSH’. You can also add a description. Once you’re done, you can close the port settings by clicking Finish.
Step 4: create SFTP connection
To connect to the SFTP server, you will need an SFTP client. Our example uses FileZilla, but you can also use WinSCP or Swish. One advantage of Swish is that it’s directly available in Windows Explorer. To configure the SFTP client, you need to enter the following information:
- Connection type (SFTP)
- IP address/Hostname
- Username
- Password
- Port (usually 22)
Once you’re done, you can connect to the SFTP server. In our example, this is on the left-hand side of your local computer. On the right, you’ll see the folder structure of the server.
Step 5: upload files to the Windows SFTP server
Upload a file to the SFTP server by moving it to the file folder on the right-hand side or by right-clicking and selecting Upload.
Was this article helpful?