SSH-сервер на основе OpenSSH package является частью операционной системы во всех современных версиях Windows. В этой статье мы покажем вам, как установить и настроить сервер OpenSSH в Windows 10/11 и Windows Server 2022/2019 и подключаться к нему удаленно через безопасное SSH-соединение (так же, как в Linux 🙂).
Содержание:
- Как установить сервер OpenSSH в Windows?
- Настройка SSH-сервера в Windows
- Sshd_config: файл конфигурации сервера OpenSSH
- Как подключиться к удаленному компьютеру с Windows через SSH?
- Проверка журналов подключения SSH в Windows
Как установить сервер OpenSSH в Windows?
Пакет OpenSSH Server входит в состав всех современных версий Windows 10 (начиная с 1803), Windows 11 и Windows Server 2022/2019 в качестве Функция по запросу (ФД). Чтобы установить сервер 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 из Функция по запросу 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*'
Состояние: установлено
Настройка SSH-сервера в Windows
После установки сервера OpenSSH в Windows добавляются две службы:
- ssh-агент (Агент аутентификации OpenSSH) — может использоваться для управления закрытыми ключами, если вы настроили аутентификацию по ключу SSH;
- sshd (SSH-сервер OpenSSH).
Вам нужно изменить тип запуска службы sshd на автоматический и запустить службу с помощью PowerShell:
Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd
Используйте команду netstat, чтобы убедиться, что SSH-сервер работает и ожидает подключения к TCP-порту 22:netstat -na| find ":22"
Убедитесь, что брандмауэр Защитника Windows разрешает входящие подключения к Windows через TCP-порт 22:Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Имя DisplayName Описание Включено. OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Входящее правило для OpenSSH SSH Server (sshd) True
Если правило отключено (Включено = Ложь) или отсутствует, вы можете создать новое входящее правило с помощью командлета 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
- Файл author_keys и ключи можно хранить в папке профиля пользователя:
%USERPROFILE%\.ssh\
Sshd_config: файл конфигурации сервера OpenSSH
Вы можете изменить настройки сервера OpenSSH в файле конфигурации: %programdata%\ssh\sshd_config
. Это обычный текстовый файл с набором директив. Вы можете использовать любой текстовый редактор для редактирования:
start-process notepad C:\Programdata\ssh\sshd_config
Например, чтобы запретить SSH-соединение для определенной учетной записи пользователя домена (или для всех пользователей в указанном домене), добавьте эти директивы в конец файла:
DenyUsers woshub\[электронная почта защищена]
DenyUsers corp\*
Чтобы разрешить SSH-подключение только к определенной группе безопасности домена:
AllowGroups woshub\sshadmins
Вы можете разрешить доступ локальной группе пользователей:
Алловгруппы sshadmins
По умолчанию все пользователи Windows могут подключаться к OpenSSH. Директивы в файлах sshd_config обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups, AllowGroups.
Вы можете запретить вход по SSH для учетных записей с правами администратора. В этом случае, если вам нужно выполнить какие-либо привилегированные действия в вашем SSH-сеансе, вам придется использовать беги как.
Администраторы DenyGroups
Следующие директивы позволяют получить доступ к Windows, используя закрытые ключи SSH или пароль.
PubkeyАутентификация да. Аутентификация по паролю да
Вы можете изменить порт TCP/22 по умолчанию, на котором принимаются соединения OpenSSH Server, в файле конфигурации sshd_config с помощью команды Порт директива.
restart-service sshd
Как подключиться к удаленному компьютеру с Windows через SSH?
Теперь вы можете попробовать подключиться к вашему компьютеру с Windows 10 с помощью SSH-клиента (в этом примере я использую шпатлевку).
ssh [email protected]
В этом примере Макс это имя пользователя на удаленном компьютере с Windows, и 192.168.13.12 IP-адрес или DNS-имя компьютера.
Обратите внимание, что вы можете использовать следующие форматы имени пользователя при подключении к Windows через SSH:
-
[email protected]
– локальный пользователь Windows -
[email protected]@server1
– Пользователь Active Directory или учетная запись Microsoft/Azure (используйте UserPrincipalName формат) -
woshub\[email protected]
– Формат имени NetBIOS
В домене Active Directory вы можете использовать аутентификацию Kerberos в SSH. Для этого вам нужно включить следующую директиву в sshd_config:
GSSAPIAАутентификация да
Теперь вы можете прозрачно подключаться к SSH-серверу из присоединенная к домену машина Windows с сеансом пользователя домена. В этом случае пароль пользователя запрашиваться не будет, а будет выполняться SSO-аутентификация через Kerberos:ssh -K server1
При первом подключении вам будет предложено добавить хост в список известных хостов SSH (C:\Users\your_user\.ssh\known_hosts
).
Нажмите Yes
и войдите под своей учетной записью Windows.
Если соединение SSH установлено успешно, вы увидите приглашение оболочки cmd.exe.
[электронная почта защищена] C:\Пользователи\Администратор>
Вы можете запускать различные команды, сценарии и приложения в командной строке 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>
).
Приглашение PowerShell было запущено в моем сеансе SSH, где работают обычные функции: автозаполнение вкладок, подсветка синтаксиса PSReadLine, история команд, и т. д. Если текущий пользователь является членом группы локальных администраторов, все команды сеанса выполняются с повышенными правами, даже если Контроль учетных записей включен.
Проверка журналов подключения SSH в Windows
По умолчанию в Windows журналы подключения к SSH-серверу записываются не в текстовые файлы, а в отдельный журнал событий через Event Tracing for Windows (ETW). Откройте консоль просмотра событий (eventvwr.msc
) и перейдите к Журналы приложений и служб -> OpenSSH -> Оперативный.
При успешном подключении к SSH-серверу с использованием пароля в журнале появится событие:
Идентификатор события: 4. sshd: принятый пароль для root от 192.168.1.53 порт 65749 ssh2
Если была выполнена аутентификация по ключу SSH, вы увидите следующее событие:
sshd: Принят открытый ключ для locadm с порта 192.168.1.53 61426
Если вы хотите, чтобы журналы SSH-соединений записывались в локальный текстовый файл, вам необходимо включить следующие параметры в sshd_config файл:
SyslogFacility LOCAL0. ИНФОРМАЦИЯ об уровне журнала
Перезапустите службу sshd и убедитесь, что журналы сервера SSH теперь записываются в обычный текстовый файл. C:\ProgramData\ssh\logs\sshd.log