SSH-сервер основанный на OpenSSH пакет является частью операционной системы во всех современных версиях Windows. В этой статье мы покажем вам, как установить и настроить сервер OpenSSH на Windows 10/11 и Windows Server 2022/2019 и подключиться к нему удаленно через защищенное SSH-соединение (как в Linux 🙂 ).

Как установить OpenSSH Server в 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-сервер в списке и нажмите Установить.

установка сервера openssh на windows 10 через приложение настройки

Вы также можете установить средства удаленного администрирования сервера (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 msi на windows

Вы можете установить сервер 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

проверить возможность установки сервера openssh на windows Get-WindowsCapability

Настройка SSH-сервера в Windows

После установки сервера OpenSSH в Windows добавляются две службы:

  • ssh-agent (Агент аутентификации OpenSSH) — может использоваться для управления закрытыми ключами, если вы настроили аутентификацию с помощью ключей SSH;
  • sshd (OpenSSH SSH Server).

Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

запуск службы sshd на windows 10
С помощью команды netstat убедитесь, что SSH-сервер запущен и ожидает подключения по TCP-порту 22:
netstat -na| find ":22"
проверка прослушивания ssh tcp порта 22 на windows 10
Убедитесь, что брандмауэр Windows Defender разрешает входящие соединения с 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

открыть входящий порт ssh в брандмауэре windows defender

Если правило отключено (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
  • Файл authorized_keys и ключи можно хранить в папке профиля пользователя: %USERPROFILE%\.ssh\

Sshd_config: Файл конфигурации сервера OpenSSH

Вы можете изменить настройки сервера OpenSSH в файле конфигурации: %programdata%\ssh\sshd_config. Это обычный текстовый файл с набором директив. Для редактирования можно использовать любой текстовый редактор:

start-process notepad C:\Programdata\ssh\sshd_config

Например, чтобы запретить SSH-соединение для определенной учетной записи пользователя домена (или всех пользователей указанного домена), добавьте эти директивы в конец файла:

DenyUsers woshub\[email protected]
DenyUsers corp\*

Чтобы разрешить SSH-соединение только для определенной группы безопасности домена:

AllowGroups woshub\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 с помощью директивы Порт директива.

%programdata%\ssh\sshd_config файл в windows

После внесения изменений в файл sshd_config необходимо перезапустить службу sshd

restart-service sshd

Как подключиться к удаленному компьютеру Windows через SSH?

Теперь вы можете попробовать подключиться к компьютеру с Windows 10 с помощью клиента SSH (в данном примере я использую putty).

Вы можете использовать встроенный SSH-клиент Windows для подключения к удаленному хосту. Для этого откройте командную строку и выполните следующую команду:

ssh [email protected]

В этом примере, max это имя пользователя на удаленном компьютере Windows, а 192.168.13.12 это IP-адрес или DNS-имя компьютера.

Обратите внимание, что при подключении к Windows через SSH можно использовать следующие форматы имен пользователей:

  • max@server1 — локальный пользователь Windows
  • [email protected]@server1 — Пользователь Active Directory или учетная запись Microsoft/Azure (используйте формат UserPrincipalName)
  • woshub\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).

putty принимает ключ rsa для ssh-сервера

Нажмите Yes, и войдите в систему под своей учетной записью пользователя Windows.

вход в windows 10 через ssh как в linux

Если подключение по SSH прошло успешно, вы увидите приглашение оболочки cmd.exe.

admin@win10pc C:\Users\admin>

оболочка cmd.exe в сеансе ssh в windows

В командной строке SSH можно запускать различные команды, сценарии и приложения.

запуск команды в windows 10 через ssh

Я предпочитаю работать в консоли PowerShell. Чтобы запустить ее, выполните:

powershell.exe

запустить powershell в windows ssh

Чтобы изменить стандартную оболочку 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

New-ItemProperty замена оболочки ssh с cmd.exe на powershell.exe

Перезапустите SSH-соединение и убедитесь, что PowerShell теперь используется в качестве оболочки SSH по умолчанию (на это указывает подсказка PS C:\Users\admin>).

консоль powershell в ssh-сессии windows 10

В моей SSH-сессии запущено приглашение PowerShell, в котором работают обычные функции: автозаполнение вкладок, подсветка синтаксиса PSReadLine, история команд и т. д. Если текущий пользователь входит в группу локальных администраторов, то все команды сеанса выполняются с повышенным уровнем доступа, даже если включен UAC.

Сервер OpenSSH под Windows может быть использован в различных сценариях туннелирования SSH.

Проверка журналов соединений SSH в Windows

По умолчанию в Windows журналы соединений SSH-серверов записываются не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль Event Viewer (eventvwr.msc ) и перейдите по адресу Журналы приложений и служб -> OpenSSH -> Оперативная.

При успешном подключении к SSH-серверу с использованием пароля в журнале появится соответствующее событие:

EventID: 4
sshd: Accepted password for root from 192.168.1.53 port 65749 ssh2

журналы соединений sshd в средстве просмотра событий windows

Если была выполнена проверка подлинности ключа 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

sshd.log файл сервера openssh на windows

Вы можете использовать безопасное SSH-соединение с PSRemoting для управления удаленными компьютерами через WinRM.