В этой статье рассмотрим, как установить и настроить встроенный SSH сервер на базе OpenSSH в Windows 10/11 и Windows Server 2022/2019. Вы узнаете, как подключиться к системе по защищенному SSH протоколу, как это делается в Linux.
OpenSSH сервер включен в современные версии Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 как Feature on Demand (FoD). Установить его можно несколькими способами.
1. Установка через PowerShell:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' | Add-WindowsCapability -Online
2. Установка через DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
3. Через панель «Параметры»:
— Перейдите в Настройки -> Приложения -> Дополнительные компоненты -> Добавить компонент.
— Найдите OpenSSH Server и нажмите Установить.
4. Установка с помощью MSI пакета:
Вы можете установить OpenSSH с помощью MSI установщика, доступного на GitHub:
Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i c:\users\root\downloads\OpenSSH-Win64-v8.9.1.0.msi
Чтобы проверить, что OpenSSH сервер установлен, выполните:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed
После установки OpenSSH на Windows появляются две службы:
— ssh-agent (для управления ключами если вы настроили SSH аутентификацию по ключам)
— sshd (собственно сам SSH сервер)
1. Настройка автозапуска SSH службы:
Выполните команду PowerShell для включения автозапуска SSH сервера:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
2. Проверка порта SSH:
Убедитесь, что сервер слушает на порту TCP:22:
netstat -na | find ":22"
3. Настройка брандмауэра:
Убедитесь, что брандмауэр разрешает подключения по SSH:
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Если правило отключено, включите его:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Если правило отключено (состоянии Enabled=False) или отсутствует, вы можете создать новое входящее правило командой New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Конфигурационный файл OpenSSH сервера находится по пути C:\ProgramData\ssh\sshd_config. Вы можете отредактировать его через любой текстовый редактор. Например, откройте файл с помощью блокнота:
start-process notepad C:\ProgramData\ssh\sshd_config
1. Запрет подключения для пользователей/групп:
— Запретить подключение для определенного пользователя:
DenyUsers softcomputers\[email protected]
DenyUsers corp\*
— Разрешить доступ только для локальной группы:
AllowGroups sshadmins
2. Изменение порта SSH:
Для смены порта измените значение директивы Port.
После изменений не забудьте перезапустить службу:
Restart-Service sshd
3. Чтобы разрешить подключение только для определенной доменной группы:
AllowGroups softcomputers\sshadmins
По умолчанию могут к openssh могут подключаться все пользователи Windows. Директивы обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups,AllowGroups.
4. Можно запретить вход под учетными записями с правами администратора, в этом случае для выполнения привилегированных действий в SSH сессии нужно делать runas.
DenyGroups Administrators
Следующие директивы разрешают SSH доступ по ключам и по паролю
PubkeyAuthentication yes
PasswordAuthentication yes
5. Вы можете изменить стандартный SSH порт TCP/22, на котором принимает подключения OpenSSH в конфигурационном файле sshd_config в директиве Port.
6. После любых изменений в конфигурационном файле sshd_config нужно перезапускать службу sshd:
restart-service sshd
Для подключения к Windows через SSH можно использовать любые SSH клиенты (например, PuTTY или встроенный клиент Windows). Пример команды для подключения:
В этом примере alexbel – имя пользователя на удаленном Windows компьютере, и 192.168.31.102 – IP адрес или DNS имя компьютера.
Обратите внимание что можно использовать следующие форматы имен пользователей Windows при подключении через SSH:
alex@server1 – локальный пользователь Windows
[email protected]@server1 – пользователь Active Directory (в виде UPN) или аккаунт Microsoft/ Azure(Microsoft 365)
softcomputers\alex@server1 – NetBIOS формат имени
Если используется аутентификация по Kerberos в домене, включите ее в конфигурационном файле:
GSSAPIAuthentication yes
После этого можно прозрачно подключать к SSH серверу с Windows компьютера в домене из сессии доменного подключения. В этом случае пароль пользователя не указывается и выполняется SSO аутентификация через Kerberos:
ssh -K server1
При первом подключении появится стандартный запрос на добавление узла в список известных SSH хостов.
Нажимаем — «Да»
В открывшееся окне авторизуемся под пользователем Windows.
При успешном подключении запускается командная оболочка cmd.exe со строкой-приглашением.
admin@win10tst C:\Users\admin>
В командной строке вы можете выполнять различные команды, запускать скрипты и приложения.
Чтобы запустить интерпретатор PowerShell, выполните:
powershell.exe
Чтобы изменить командную оболочку (Shell) по умолчанию в OpenSSH с cmd.exe на PowerShell, внесите изменение в реестр следующей командой:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String –Force
Осталось перезапустить SSH подключение и убедиться, что при подключении используется командный интерпретатор PowerShell
(об этом свидетельствует приглашение PS C:\Users\admin>).
В SSH сессии запустилась командная строка PowerShell, в которой работают привычные функции: авто дополнение, раскраска модулем PSReadLine, история команд и т.д. Если текущий пользователь входит в группу локальных администраторов, то все команды в его сессии выполняются с повышенными правами даже при включенном UAC.
Логи SSH подключений пишутся в журнал событий Windows через Event Tracing for Windows (ETW). Чтобы просмотреть логи:
1. Откройте Event Viewer (eventvwr.msc).
2. Перейдите в Application and Services Logs -> OpenSSH -> Operational.
Пример события успешного подключения по паролю:
EventID: 4
sshd: Accepted password for user1 from 192.168.31.102 port 55432 ssh2
Если необходимо, вы можете настроить запись логов в текстовый файл. Для этого добавьте в файл sshd_config директивы:
SyslogFacility LOCAL0
LogLevel INFO
Перезапустите службу sshd для применения изменений и проверьте, что теперь логи SSH сервера пишутся в файл C:\ProgramData\ssh\logs\sshd.log
Теперь вы знаете, как настроить и использовать OpenSSH сервер на Windows для удаленного подключения по защищенному протоколу SSH.