OpenSSH Server на Windows

Обновлено и опубликовано Опубликовано:

Используемые термины: SSH, Windows.

В инструкции рассмотрим установку и настройку OpenSSH Server на Windows — от включения компонента и запуска службы до входа по SSH-ключу и правки конфига.

OpenSSH на Windows может использоваться для:

  • SSH-туннелирования.
  • Автоматизации процессов.
  • Безопасной передачи файлов.
  • Удаленного администрирования.

Инструкция рассчитана на Windows 10 (1809+), Windows 11 или Windows Server 2019+. Команды в PowerShell запускаем от имени администратора. У учётной записи, под которой планируется подключаться по SSH должен быть непустой пароль (пустой пароль блокирует сетевой вход).

Установка 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, StartTypeAutomatic.

Настройка брандмауэра 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 настроен и готов к работе.

# Windows # Безопасность # Серверы # Управление
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет

Дмитрий Моск
— IT-специалист.
Настройка серверов, услуги DevOps.

Нужна бесплатная консультация?

Мини-инструкции

Как запустить llama.cpp на Linux-сервере: сборка, модель GGUF и API-сервер

OpenSSH Server на Windows: вход по SSH

Установка и запуск Harbor Registry на Kubernetes с помощью Helm Chart

Как установить и настроить ArgoCD в кластере Kubernetes

Использование Helm для установки Garage S3 в Kubernetes

Как установить и настроить K3S для корректной работы на Linux Ubuntu

Использование приложения Barman для резервного копирования СУБД PostgreSQL

Другие инструкции

Все статьи

Нужна помощь? Пишите:






Реклама