OpenSSH Server на Windows
Опубликовано:
Используемые термины: SSH, Windows.
В инструкции рассмотрим установку и настройку OpenSSH Server на Windows — от включения компонента и запуска службы до входа по SSH-ключу и правки конфига.
OpenSSH на Windows может использоваться для:
- SSH-туннелирования.
- Автоматизации процессов.
- Безопасной передачи файлов.
- Удаленного администрирования.
Инструкция рассчитана на Windows 10 (1809+), Windows 11 или Windows Server 2019+. Команды в PowerShell запускаем от имени администратора. У учётной записи, под которой планируется подключаться по SSH должен быть непустой пароль (пустой пароль блокирует сетевой вход).
Установка и запуск сервера SSH
Настройка сетевого экрана
Подключение клиента по SSH
Дополнительные настройки
Удаление OpenSSH
Установка OpenSSH Server и запуск службы
Проверим, установлен ли компонент OpenSSH Server:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*'
* в State должно быть NotPresent или Installed. На Windows Server 2025 компонент часто уже установлен — тогда шаг Add-WindowsCapability пропускаем.
Если компонент не установлен, добавим его:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
* ожидаемый результат: Online : True, RestartNeeded : False.
Переведём службу в автозапуск и запустим её:
Set-Service -Name sshd -StartupType Automatic
Start-Service sshd
Проверим статус:
Get-Service sshd
* Status должен быть Running, StartType — Automatic.
Настройка брандмауэра Windows
Проверим, есть ли правило для входящих подключений по SSH:
Get-NetFirewallRule -Name OpenSSH-Server-In-TCP
* правило обычно создаётся при установке. Если команда ничего не находит — создаём вручную.
New-NetFirewallRule -Name OpenSSH-Server-In-TCP -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
* разрешает входящий TCP/22. Если правило уже есть, повторный New-NetFirewallRule выдаст ошибку имени — это нормально.
Подключение клиента по SSH
На сервере смотрим IP-адрес и имя текущего пользователя — они понадобятся для подключения:
Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.IPAddress -notlike '127.*'} | Select-Object IPAddress, InterfaceAlias
$env:USERNAME
* для локальной УЗ в SSH указывают имя из $env:USERNAME. Для доменной — DOMAIN\user или user@domain. Для учётной записи Microsoft — имя папки в C:\Users\.
Подключимся к серверу с клиентской машины:
ssh Administrator@192.168.1.50
* подставьте своё имя пользователя Windows и IP хоста. При первом подключении подтвердите host key, затем введите пароль учётной записи Windows.
Проверим, что попали на нужный хост и под нужным пользователем:
whoami
hostname
Подключение настроено. Дальше рассмотрим более безопасный вариант входа — по SSH-ключу.
Дополнительные настройки
Рассмотрим некоторые настройки, которые могут оказаться полезными.
Оболочка по умолчанию (PowerShell)
По умолчанию SSH-сессия открывается в cmd.exe. Заменим оболочку по умолчанию на PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
* без этого шага сессия часто открывается в cmd.exe.
Вход по SSH-ключу
Вход по ключу надёжнее пароля и избавляет от необходимости вводить его при каждом подключении. Сгенерируем пару ключей на клиенте.
На клиенте (Linux / macOS / другая Windows):
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
type $env:USERPROFILE\.ssh\id_ed25519.pub
* на Linux/macOS вместо type используйте cat ~/.ssh/id_ed25519.pub. Скопируйте строку публичного ключа целиком.
Дальше публичный ключ добавляется на сервере по-разному, в зависимости от типа учётной записи.
а) обычный пользователь Windows (не администратор):
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.ssh"
Add-Content -Force -Path "$env:USERPROFILE\.ssh\authorized_keys" -Value 'ssh-ed25519 AAAA... comment'
* путь: C:\Users\<user>\.ssh\authorized_keys. Значение — содержимое id_ed25519.pub.
б) пользователь из группы Administrators:
Add-Content -Force -Path "$env:ProgramData\ssh\administrators_authorized_keys" -Value 'ssh-ed25519 AAAA... comment'
icacls "$env:ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "*S-1-5-32-544:F" /grant "SYSTEM:F"
* для администраторов Windows по умолчанию читает ключи из C:\ProgramData\ssh\administrators_authorized_keys, а не из профиля. *S-1-5-32-544 — SID группы Administrators (работает и на локализованных Windows).
Перезапустим службу, чтобы изменения точно применились:
Restart-Service sshd
Можно пробовать зайти на сервер по ключу:
ssh -i ~/.ssh/id_ed25519 Administrator@192.168.1.50
Если подключение прошло без запроса пароля — ключ настроен верно.
Конфигурационный файл sshd_config
Основные параметры сервера хранятся в конфиге sshd_config. Перед правкой сделаем резервную копию и откроем файл:
Copy-Item C:\ProgramData\ssh\sshd_config C:\ProgramData\ssh\sshd_config.bak
notepad C:\ProgramData\ssh\sshd_config
Port 22
PasswordAuthentication yes
PubkeyAuthentication yes
AllowUsers Administrator
* где:
- Port — порт SSH (по умолчанию 22). При смене порта обновите правило брандмауэра.
- PasswordAuthentication — вход по паролю Windows. После настройки ключей можно поставить no.
- PubkeyAuthentication — вход по публичному ключу.
- AllowUsers — белый список учёток; раскомментируйте/добавьте строку в конец файла.
Сохраним файл и применим изменения перезапуском службы:
Restart-Service sshd
Если нужен пользовательский authorized_keys и для администраторов — в конце sshd_config закомментируйте блок Match Group administrators (строки про AuthorizedKeysFile) и перезапустите sshd.
Удаление OpenSSH Server
Если сервер больше не нужен, остановим службу и уберём компонент:
Stop-Service sshd
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
* правило брандмауэра New-NetFirewallRule при этом не удаляется автоматически — при необходимости убираем его отдельно через Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP.
OpenSSH Server настроен и готов к работе.