Как включить и настроить SSH-сервер в Windows с помощью OpenSSH
SSH-сервер на базе пакета OpenSSH является частью операционной системы всех современных версий Windows. В этой статье мы покажем вам, как установить и настроить сервер OpenSSH в Windows 10/11 и Windows Server 2022/2019 и подключиться к нему удаленно через безопасное SSH-соединение (как в Linux 🙂).
Как установить сервер OpenSSH в Windows?
Пакет OpenSSH Server входит в состав всех современных версий Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в качестве функции по требованию (FoD). Чтобы установить сервер OpenSSH, откройте приглашение PowerShell с повышенными правами и выполните команду:
Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online Или используя DISM:
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0Если ваш компьютер напрямую подключен к Интернету, пакет OpenSSH.Server будет загружен и установлен в Windows.
Вы также можете установить OpenSSH в Windows 10/11 через современную панель Настройки (Настройки -> Приложения и функции -> Дополнительные функции -> Добавить функцию). Найдите в списке Открыть SSH-сервер и нажмите Установить.
Отсюда вы также можете установить инструменты удаленного администрирования сервера (RSAT).
На компьютерах в отключенных (автономных) средах вы можете установить сервер OpenSSH из образа Feature on Demand ISO (доступного в вашей учетной записи на веб-сайтах Microsoft: MSDN или my.visualstudio.com). Загрузите ISO и извлеките его содержимое в папку E:\FOD (вы можете извлечь только файл
OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab) и установите функцию Windows из локального репозитория:
Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source E:\FODУстановщик MSI для OpenSSH для Windows также доступен в официальном репозитории Microsoft на GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). Например, для Windows 10 x64 вам необходимо скачать и установить пакет OpenSSH-Win64-v8.9.1.0.msi. Следующая команда PowerShell загрузит файл MSI и установит клиент и сервер OpenSSH на ваш компьютер:
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 $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msiВы также можете установить сервер OpenSSH в предыдущих версиях Windows (Windows 8.1, Windows Server 2016/2012R2/2012). Посмотрите пример установки и настройки Win32-OpenSSH в статье «Как настроить SFTP-сервер (SSH FTP) в Windows? ».
Чтобы убедиться, что сервер OpenSSH установлен, выполните команду:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'State : InstalledНастройка SSH-сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
-
ssh-agent (Агент аутентификации OpenSSH) - можно использовать для управления закрытыми ключами, если вы настроили аутентификацию по ключу SSH;
sshd (SSH-сервер OpenSSH).
Вам необходимо изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshdИспользуйте команду netstat, чтобы убедиться, что SSH-сервер работает и ожидает соединений через TCP-порт 22:
netstat -na| find ":22"Убедитесь, что брандмауэр Защитника Windows разрешает входящие подключения к Windows через TCP-порт 22:
Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, EnabledName DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) TrueЕсли правило отключено (Enabled=False) или отсутствует, вы можете создать новое правило для входящего трафика с помощью командлета New-NetFirewallRule:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22По умолчанию ключевые компоненты OpenSSH расположены в следующих папках:
-
Исполняемые файлы сервера OpenSSH:
C:\Windows\System32\OpenSSH\(sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe и т. д.)
Файл sshd_config (создается после первого запуска сервиса):
C:\ProgramData\sshФайл авторизованных_ключей и ключи можно хранить в папке профиля пользователя:
%USERPROFILE%\.ssh\
Sshd_config: файл конфигурации сервера OpenSSH.
Вы можете изменить настройки сервера OpenSSH в файле конфигурации:
%programdata%\ssh\sshd_config. Это обычный текстовый файл с набором директив. Для редактирования вы можете использовать любой текстовый редактор:
start-process notepad C:\Programdata\ssh\sshd_configНапример, чтобы запретить SSH-соединение для определенной учетной записи пользователя домена (или всех пользователей в указанном домене), добавьте эти директивы в конец файла:
DenyUsers active-directory\admin@192.168.1.10
DenyUsers corp\*Чтобы разрешить SSH-подключение только к определенной группе безопасности домена:
AllowGroups active-directory\sshadminsВы можете разрешить доступ локальной группе пользователей:
AllowGroups sshadminsПо умолчанию все пользователи Windows могут подключаться к OpenSSH. Директивы в файлах sshd_config обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups, AllowGroups.
Вы можете запретить вход по SSH для учетных записей с правами администратора. В этом случае, если вам нужно выполнить какие-либо привилегированные действия в вашей SSH-сессии, вам придется использовать runas.
DenyGroups AdministratorsСледующие директивы позволяют вам получить доступ к Windows, используя закрытые ключи SSH или пароль.
PubkeyAuthentication yes
PasswordAuthentication yesВы можете изменить порт TCP/22 по умолчанию, на котором принимаются соединения OpenSSH Server, в файле конфигурации sshd_config с помощью директивы Port.
После внесения каких-либо изменений в файл sshd_config необходимо перезапустить службу sshd.
restart-service sshdКак подключиться к удаленному компьютеру Windows через SSH?
Теперь вы можете попробовать подключиться к компьютеру с Windows 10 с помощью SSH-клиента (в этом примере я использую putty).
Вы можете использовать встроенный SSH-клиент Windows для подключения к удаленному хосту. Для этого откройте командную строку и выполните следующую команду:
ssh max@192.168.13.12В этом примере max — это имя пользователя на удаленном компьютере Windows, а 192.168.13.12 — это IP-адрес или DNS-имя компьютера.
Обратите внимание, что при подключении к Windows через SSH вы можете использовать следующие форматы имени пользователя:
max@server1- локальный пользователь Windows
max@active-directory.ru@server1- Пользователь Active Directory или учетная запись Microsoft/Azure (используйте формат UserPrincipalName).
active-directory\max@server1- Формат имени NetBIOS
В домене Active Directory вы можете использовать аутентификацию Kerberos в SSH. Для этого вам нужно включить следующую директиву в sshd_config:
GSSAPIAuthentication yesТеперь вы можете прозрачно подключиться к SSH-серверу с компьютера Windows, присоединенного к домену, с помощью сеанса пользователя домена. В этом случае пароль пользователя запрашиваться не будет, а будет выполнена SSO-аутентификация через Kerberos:
ssh -K server1При первом подключении вам будет предложено добавить хост в список известных хостов SSH (
C:\Users\your_user\.ssh\known_hosts).
Нажмите
Yesи войдите под своей учетной записью Windows.
Если SSH-соединение установлено успешно, вы увидите приглашение оболочки cmd.exe.
admin@win10pc C:\Users\admin>Вы можете запускать различные команды, сценарии и приложения в командной строке SSH.
Я предпочитаю работать в консоли PowerShell. Чтобы запустить его, запустите:
powershell.exeЧтобы изменить оболочку cmd.exe по умолчанию в OpenSSH на PowerShell, внесите изменения в реестр, используя следующую команду PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -ForceПерезапустите SSH-соединение и убедитесь, что PowerShell теперь используется в качестве оболочки SSH по умолчанию (на это указывает приглашение
PS C:\Users\admin>).
В моем сеансе SSH было запущено приглашение PowerShell, где работают обычные функции: автозаполнение вкладок, подсветка синтаксиса PSReadLine, история команд и т. д. Если текущий пользователь является членом группы локальных администраторов, все команды сеанса выполняются даже с повышенными правами. если UAC включен.
Сервер OpenSSH в Windows можно использовать в различных сценариях туннелирования SSH.
Проверка журналов SSH-соединений в Windows
По умолчанию в Windows журналы подключений SSH-сервера записываются не в текстовые файлы, а в отдельный журнал событий через трассировку событий для Windows (ETW). Откройте консоль просмотра событий (
eventvwr.msc) и перейдите к Журналы приложений и служб -> OpenSSH -> Работа.
Если вы успешно подключитесь к SSH-серверу с использованием пароля, в журнале появится событие:
EventID: 4
sshd: Accepted password for root from 192.168.1.53 port 65749 ssh2Если аутентификация по ключу SSH была выполнена, вы увидите следующее событие:
sshd: Accepted publickey for locadm from 192.168.1.53 port 61426
ssh2: ED25519 SHA256:FEHDEC/G42FS23209C2KMb4335923pigN31s3qMK322lGibDЕсли вы хотите, чтобы журналы SSH-соединений записывались в локальный текстовый файл, вам необходимо включить следующие параметры в файле sshd_config:
SyslogFacility LOCAL0
LogLevel INFOПерезапустите службу sshd и убедитесь, что журналы сервера SSH теперь записаны в текстовый файл C:\ProgramData\ssh\logs\sshd.log
Вы можете использовать безопасное соединение SSH с PSRemoting для управления удаленными компьютерами через WinRM.















