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 из раздела 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 установлен, выполните команду:
Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed
Настройка SSH-сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
- ssh-agent (Агент аутентификации OpenSSH) — может использоваться для управления закрытыми ключами, если вы настроили аутентификацию с помощью ключей SSH;
- sshd (OpenSSH SSH Server).
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
С помощью команды netstat убедитесь, что SSH-сервер запущен и ожидает подключения по TCP-порту 22:
netstat -na| find ":22"
Убедитесь, что брандмауэр 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
Если правило отключено (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 с помощью директивы Порт директива.
restart-service sshd
Как подключиться к удаленному компьютеру Windows через SSH?
Теперь вы можете попробовать подключиться к компьютеру с Windows 10 с помощью клиента SSH (в данном примере я использую putty).
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
).
Нажмите Yes
, и войдите в систему под своей учетной записью пользователя Windows.
Если подключение по SSH прошло успешно, вы увидите приглашение оболочки cmd.exe.
admin@win10pc C:\Users\admin>
В командной строке SSH можно запускать различные команды, сценарии и приложения.
Я предпочитаю работать в консоли PowerShell. Чтобы запустить ее, выполните:
powershell.exe
Чтобы изменить стандартную оболочку 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
Перезапустите SSH-соединение и убедитесь, что PowerShell теперь используется в качестве оболочки SSH по умолчанию (на это указывает подсказка PS C:\Users\admin>
).
В моей SSH-сессии запущено приглашение PowerShell, в котором работают обычные функции: автозаполнение вкладок, подсветка синтаксиса PSReadLine, история команд и т. д. Если текущий пользователь входит в группу локальных администраторов, то все команды сеанса выполняются с повышенным уровнем доступа, даже если включен UAC.
Проверка журналов соединений 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
Если была выполнена проверка подлинности ключа 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