OpenSSH в Windows 10/11 не работает — как установить, включить и починить (2025)

SSH нужен, чтобы подключаться к серверам и удалённо администрировать систему. В Windows 10/11 клиент и сервер OpenSSH встроены, но часто не установлены, не запущены или их блокирует брандмауэр. Ниже — понятный план: поставим нужные компоненты, поднимем службы, откроем порт 22, создадим ключи и проверим соединение. Из «магии» только чёткие шаги и проверяемые команды.

Коротко: что проверить сразу

  • Компоненты OpenSSH Client и OpenSSH Server установлены.
  • Службы sshd и ssh-agent запущены и в автозапуске.
  • В Брандмауэре Windows открыт вход по TCP 22 для «Частной» сети.
  • Антивирус не перехватывает порт, а роутер не режет NAT/UPnP, если подключаетесь извне.
Нужна помощь? Подключусь удалённо, всё настрою, проверю конфигурацию и доведу до рабочего состояния. Без «магии», только понятные шаги и отчёт.

1) Установка OpenSSH: через Параметры или PowerShell

Проще всего — через «Дополнительные компоненты». Но надёжнее — PowerShell с правами администратора.

PowerShell (Администратор) — выполнять по одной:

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Если последняя команда показывает State = Installed — отлично. Идём дальше.

2) Службы: включаем и настраиваем sshd и ssh-agent

Нам нужно, чтобы сервер принимал входящие подключения, а агент умел хранить ключи.

PowerShell (Администратор) — выполнять по одной:

Set-Service -Name sshd -StartupType Automatic
Set-Service -Name ssh-agent -StartupType Automatic
Start-Service sshd
Start-Service ssh-agent
Get-Service sshd,ssh-agent

Если sshd не стартует — смотрим журнал и файл конфигурации.

PowerShell (Администратор) — выполнять по одной:

Get-WinEvent -LogName Application -Max 200 | Where-Object {$_.ProviderName -like '*sshd*'} | Select TimeCreated, Id, LevelDisplayName, Message
notepad $env:ProgramData\ssh\sshd_config

В конфиге по умолчанию уже включены логин/пароль и ключи. Для домашней сети этого достаточно.

3) Брандмауэр: открываем порт 22

Без этого к вам не зайти даже в локалке.

PowerShell (Администратор) — вставить целиком:

$rule = Get-NetFirewallRule -DisplayName "OpenSSH Server (sshd)" -ErrorAction SilentlyContinue
if(-not $rule) { New-NetFirewallRule -DisplayName "OpenSSH Server (sshd)" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow -Profile Private }
else { Set-NetFirewallRule -DisplayName "OpenSSH Server (sshd)" -Enabled True -Profile Private }

Если меняли порт — замените -LocalPort на свой и не забудьте пробросить его на роутере для внешних подключений.

4) Ключи: создаём и подключаем

Для клиента создаём пару ключей и добавляем публичный в authorized_keys на целевом ПК. Так вход будет без пароля.

PowerShell (пользователь) — выполнять по одной:

ssh-keygen -t ed25519 -C "home-pc"
type $env:USERPROFILE\.ssh\id_ed25519.pub
# Скопируйте вывод в файл %USERPROFILE%\.ssh\authorized_keys на целевом ПК
icacls $env:USERPROFILE\.ssh /inheritance:r
icacls $env:USERPROFILE\.ssh /grant:r "$($env:USERNAME):(OI)(CI)F"
icacls $env:USERPROFILE\.ssh\authorized_keys /inheritance:r
icacls $env:USERPROFILE\.ssh\authorized_keys /grant:r "$($env:USERNAME):F"

Права на папку и файл должны быть только у владельца, иначе sshd может игнорировать ключи.

5) Тест: подключаемся локально и с соседнего ПК

Сначала проверим на самом компьютере, затем — из сети по имени или IP.

Командная строка (или PowerShell) — выполнять по одной:

ssh localhost
whoami
exit
ssh user@192.168.1.50
# Если имя ПК в локалке не находится:
ping -4 имя-ПК
nslookup имя-ПК
arp -a

6) Частые причины, почему OpenSSH «не работает»

  • Компонент не установлен — поставьте Client/Server через PowerShell.
  • Служба sshd не запускается — читайте журнал, проверьте конфиг и права на %ProgramData%\ssh.
  • Брандмауэр закрывает порт — создайте правило входящего TCP 22 для профиля «Частный».
  • Ключи не принимаются — проверьте права на .ssh и формат ключей.
  • DNS/имя ПК не резолвится — используйте IP или настройте локальный DNS/NBNS.

7) Диагностика: что говорит система

PowerShell (Администратор) — выполнять по одной:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Get-Service sshd,ssh-agent | Select Status, StartType, Name
Get-NetFirewallPortFilter | Where-Object {$_.LocalPort -eq 22} | Select LocalPort, Protocol
Get-WinEvent -LogName "Microsoft-Windows-OpenSSH/Operational" -Max 100 | Select TimeCreated, Id, LevelDisplayName, Message

Читайте также: