OpenSSH - инструмент для безопасного удалённого доступа по протоколу SSH. Шифрует весь трафик, поддерживает аутентификацию по ключам, работает на Windows, Linux, macOS.
💡 После настройки ты сможешь подключаться к своему Windows-ПК как к обычному Linux-серверу:
ssh user@192.168.1.100
Требования
- ОС: Windows 10 (1809+), Windows 11, Windows Server 2019/2022
- Права: Администратор
- Сеть: Доступ к порту 22 (локально или извне)
Установка (3 способа)
Способ 1: PowerShell (рекомендуется)
# Запусти от имени Администратора
# Установить OpenSSH сервер
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Проверить установку
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Способ 2: DISM (альтернатива)
dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
Способ 3: Через настройки (GUI)
- Настройки → Приложения → Дополнительные компоненты
- «Добавить компонент» → найди «OpenSSH Server» → Установить
Настройка службы
# Запустить от имени Администратора
# Включить автозапуск sshd
Set-Service -Name sshd -StartupType Automatic
# Запустить службу
Start-Service sshd
# Проверить статус
Get-Service sshd
# Убедиться, что порт 22 слушается
netstat -ano | findstr :22
Брандмауэр
# Проверить правило для OpenSSH
Get-NetFirewallRule -Name *OpenSSH-Server* | Select Name, Enabled
# Если правила нет - создать
New-NetFirewallRule -Name sshd `
-DisplayName 'OpenSSH Server' `
-Enabled True `
-Direction Inbound `
-Protocol TCP `
-LocalPort 22 `
-Action Allow `
-Profile Any
Проверка подключения
# С этого же ПК
ssh localhost
# С другого устройства в сети
ssh <твой_пользователь>@<IP_адрес_Windows>
# Пример:
ssh kirill@192.168.1.100
💡 Первый вход запросит подтверждение отпечатка ключа - введи
yes.
Аутентификация по ключам (рекомендуется)
На клиенте (где подключаешься)
# Создать пару ключей (если нет)
ssh-keygen -t ed25519 -C "kirill@potatoenergy.ru"
# Скопировать публичный ключ на сервер
# Для Windows-сервера - вручную:
type $env:USERPROFILE\.ssh\id_ed25519.pub
# Скопируй вывод
На сервере (Windows)
# Создать папку .ssh в профиле пользователя
mkdir $env:USERPROFILE\.ssh -Force
# Создать/отредактировать authorized_keys
notepad $env:USERPROFILE\.ssh\authorized_keys
# Вставить публичный ключ (одной строкой), сохранить
# Задать правильные права (ОБЯЗАТЕЛЬНО)
$acl = Get-Acl $env:USERPROFILE\.ssh\authorized_keys
$acl.SetAccessRuleProtection($true, $false)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$env:USERNAME, "Read", "Allow")
$acl.AddAccessRule($rule)
Set-Acl $env:USERPROFILE\.ssh\authorized_keys $acl
Отключить вход по паролю (опционально, для безопасности)
# Отредактировать конфиг
notepad C:\ProgramData\ssh\sshd_config
# Найти и изменить строки:
# PasswordAuthentication no
# PubkeyAuthentication yes
# Перезапустить службу
Restart-Service sshd
Конфигурация: полезные настройки
Файл: C:\ProgramData\ssh\sshd_config
# Только определённые пользователи
AllowUsers kirill admin
# Сменить порт (если 22 занят)
Port 2222
# Запретить root-логин
PermitRootLogin no
# Таймаут неактивности
ClientAliveInterval 300
ClientAliveCountMax 2
# Логирование
LogLevel VERBOSE
После правок:
Restart-Service sshd
Частые проблемы
# Служба не запускается
→ Проверь логи: Get-WinEvent -LogName "OpenSSH/Operational" -MaxEvents 10
# Порт 22 не слушается
→ Проверь брандмауэр: Get-NetFirewallRule -Name sshd
→ Проверь, что служба запущена: Get-Service sshd
# "Permission denied (publickey,password)"
→ Проверь права на authorized_keys (должен читать только владелец)
→ Убедись, что публичный ключ вставлен одной строкой, без переносов
# Подключение есть, но нет прав на файлы
→ Проверь права пользователя на папки в Windows
→ Попробуй запустить терминал от имени администратора на клиенте