Поиск по сайту:

Как включить и настроить 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, Enabled
Name 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.

Статьи по данной тематике