09.08.2022

Настройка OpenSSH-сервера на Windows Server 2019

Прежде всего, вы можете спросить, зачем нам вообще нужен SSH-сервер на Windows-сервере? В среде Windows SSH может показаться не очень полезным. В конце концов, у нас есть RDP и PowerShell Remoting с WinRM, которые уже обеспечивают мощные возможности удаленного управления. Тем не менее, SSH в Windows определенно имеет свои преимущества. Среди них можно выделить такие вещи, как:

Установка OpenSSH в Windows Server 2019

Открываем SettingsApps & featuresManage optional features:

Нажимаем Add a feature, ищем OpenSSH ServerInstall:

На предыдущем экране дожидаемся окончания процесса инсталляции. OpenSSH сервер можем считать установленным.

Обращаем внимание, что установка этим методом автоматически создаст правило Windows Firewall, с названием «OpenSSH-Server-In-TCP», открывающее 22 порт для входящих подключений.

Используя PowerShell:

Проверим, присутствует ли на нашей системе встроенный OpenSSH:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

В ответ должны получить:

Name : OpenSSH.Client~~~~0.0.1.0
State : NotPresent #или Install, если клиент уже установлен
Name : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Устанавливаем клиент, если он не установлен:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

Для установки сервера вводим:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

В обоих случаях вывод должен быть следующим:

Path :
Online : True
RestartNeeded : False

Первичная конфигурация SSH-сервера

По умолчанию при подключении к OpenSSH-серверу используется командная строка Windows. Вы можете использовать практически любую оболочку на вашем компьютере с Windows через SSH-соединение. Даже возможно использовать Bash, когда подсистема Windows для Linux (WSL) также установлена на целевой машине. Также возможно изменение оболочки по умолчанию на SSH-сервере на нечто иное, чем командная оболочка. Для этого ключ реестра «DefaultShell» необходимо изменить.

Сделать это можно как через редактор реестра regedit.exe, открыв в нем следующий путь: HKEY_LOCAL_MACHINESOFTWAREOpenSSH и изменив в нем параметр DefaultShell, указав в нем полный путь до исполняемого файла необходимой командной строки, например:

C:WindowsSystem32WindowsPowerShellv1.0powershell.exe

Тоже самое можно сделать используя PowerShell:

New-ItemProperty -Path "HKLM:SOFTWAREOpenSSH" -Name DefaultShell -Value "C:WindowsSystem32WindowsPowerShellv1.0powershell.exe" -PropertyType String -Force

Проверим настройки Windows Firewall, используя для этого PowerShell:

Get-NetFirewallRule -Name *ssh*

Введя данную команду мы получим параметры правила, разрешающего SSH-подключение к серверу. Если правила не оказалось, введем следующую команду, создав его:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Запуск службы OpenSSH

После установки функции SSH-сервера нам остается только его запустить:

Start-Service sshd

Опционально можно установить для службы sshd автоматический запуск:

Set-Service -Name sshd -StartupType 'Automatic'

Подключение к серверу

Теперь мы готовы к работе и можем подключиться через установленное приложение к нашему хосту. Это можно осуществить либо с Windows 10, компьютера с Linux, с putty.exe на более старой машине с Windows, либо с Bash в настольной операционной системе от Microsoft. Все, что вам нужно, это найти какой-либо SSH-клиент, ввести в него имя пользователя, имя вашего сервера или IP-адрес и подключиться.

Для SSH-клиента в PowerShell синтаксис будет таким:

Ssh username@servername

При первом подключении с неизвестного хоста будет показано следующее сообщение:

Ответив на него yes, хост подключения будет добавлен в список известных хостов сервера. После чего необходимо ввести пароль пользователя (по соображениям безопасности вводимые символы отображаться не будут). После успешного подключения отобразится интерфейс используемой командной строки:

Копирование файлов

Также, как с сервером OpenSSH в любой системе * nix, вы можете использовать SCP для копирования файлов на сервер или с сервера.
Например, администратор Linux может быстро получить файл журнала с сервера Windows с помощью той же команды, что и для сервера Linux.

scp username@servername:C:/inetpub/logs/LogFiles/W3SVC1/u_ex191017.log u_ex191017.log

Когда вы подключаетесь из Bash/*nix к машине с Windows, нужно помнить, что пути Windows также должны указываться с обычными косыми чертами Unix вместо обратных косых черт. Например, C:/Windows вместо C:Windows.

sshd_config

Аналогично операционным системам семейства Linux, OpenSSH Server в Windows имеет в своем составе особый файл, где хранятся все параметры для выполнения более подробных настроек. Например,  для ограничения входа.

По умолчанию файл конфигурации находится в «%programdata%sshsshd_config».
Самые различные настройки, применимые к этому файлу можно найти на сайте https://man.openbsd.org/sshd_config.

Кроме того, у Microsoft есть документация для специфичных настроек Windows.

Больше информации

Дополнительную информацию об OpenSSH в Windows можно найти на сайте docs.microsoft.com или в проекте GitHub разветвления OpenSSH от Microsoft.