Конфигурация сервера OpenSSH для Windows Server и Windows

Применимо к Windows Server 2022, Windows Server 2019, Windows 10 (сборка 1809 и более поздние версии)

В этой статье описывается конфигурация windows для сервера OpenSSH (sshd).

OpenSSH содержит подробную документацию по параметрам конфигурации в интернете по OpenSSH.com, которая не дублируется в этом наборе документации.

Файлы конфигурации OpenSSH

OpenSSH содержит файлы конфигурации для параметров сервера и клиента. OpenSSH является открытым исходным кодом и добавляется в операционные системы Windows Server и Windows Client, начиная с Windows Server 2019 и Windows 10 (сборка 1809). В результате документация с открытым кодом для файлов конфигурации OpenSSH не повторяется здесь. Файлы конфигурации клиента и их можно найти на странице ssh_config вручную и файлы конфигурации сервера OpenSSH можно найти на странице sshd_config вручную.

Open SSH Server (sshd) считывает данные конфигурации из %programdata%\ssh\sshd_config по умолчанию, или другой файл конфигурации можно указать путем запуска sshd.exe с параметром -f . Если указанный файл отсутствует, sshd создаст новый файл с конфигурацией по умолчанию при запуске службы.

В Windows клиент OpenSSH считывает данные конфигурации из файла конфигурации в следующем порядке:

  1. Запустите ssh.exe с параметром -F, указав путь к файлу конфигурации и имени записи из этого файла.
  2. Файл конфигурации пользователя по адресу %userprofile%\.ssh\config.
  3. Файл конфигурации на уровне системы по адресу %programdata%\ssh\ssh_config.

Настройка стандартной оболочки OpenSSH для Windows

Стандартная оболочка командной строки предоставляет пользователю интерфейс, который он увидит при подключении к серверу по протоколу SSH. По умолчанию в среде Windows изначально используется командная оболочка Windows (cmd.exe). Windows также включает PowerShell и сторонние командные оболочки также доступны для Windows и могут быть настроены в качестве оболочки по умолчанию для сервера.

Чтобы задать командную оболочку по умолчанию, для начала убедитесь, что папка установки OpenSSH находится в системном пути. Для Windows папка установки по умолчанию — %systemdrive%\Windows\System32\opensh. Следующая команда показывает текущий параметр пути и добавляет в нее папку установки OpenSSH по умолчанию.

Командная оболочка Используемая команда
Команда path
PowerShell $env:path

Настройка оболочки SSH по умолчанию выполняется в реестре Windows, добавив полный путь к исполняемому файлу HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH оболочки в строковое значение DefaultShell.

Например, следующая команда PowerShell с повышенными привилегиями задает оболочку по умолчанию для powershell.exe:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Конфигурация Windows в файле sshd_config

В Windows sshd считывает данные конфигурации из %programdata%\ssh\sshd_config по умолчанию или другой файл конфигурации можно указать путем запуска sshd.exe с параметром -f . Если указанный файл отсутствует, sshd создаст новый файл с конфигурацией по умолчанию при запуске службы.

Ниже перечислены элементы конфигурации специально для среды Windows, которые можно указать в sshd_config. Существуют и другие параметры конфигурации, которые не перечислены здесь, так как они подробно описаны в документации по Win32 OpenSSH в Интернете.

Совет

Сервер OpenSSH (sshd) считывает файл конфигурации при запуске службы. Для всех изменений в файле конфигурации требуется перезапустить службу.

AllowGroups, AllowUsers, DenyGroups, DenyUsers

Управление подключением пользователей и групп к серверу осуществляется с помощью директив AllowGroups, AllowUsers, DenyGroups и DenyUsers. Директивы allow/deny обрабатываются в следующем порядке: DenyUsers, AllowUsers, DenyGroups и, наконец, AllowGroups. Все имена учетных записей должны быть указаны в нижнем регистре. Дополнительные сведения о ШАБЛОНАх и диких карта в ssh_config см. на странице sshd_config вручную OpenBSD.

При настройке правил для пользователей и (или) групп в домене используйте следующий формат: user?domain*. Windows поддерживает несколько форматов для указания субъектов домена, но многие конфликтуют со стандартными шаблонами Linux. По этой причине добавлен символ *, чтобы поддерживать полные доменные имена. Кроме того, этот подход использует "?", а не @, чтобы избежать конфликтов с форматом username@host.

Пользователи и группы, входящие в рабочие группы, а также подключенные к Интернету учетные записи всегда разрешаются в имена локальных учетных записей (без сегмента домена, примерно как стандартные имена в UNIX). Пользователи и группы домена строго разрешаются в формат NameSamCompatible, то есть "короткое_имя_домена\имя_пользователя". Все правила конфигурации для пользователей и групп должны соответствовать этому формату.

Следующий пример запрещает contoso\admin на узле 192.168.2.23 и блокирует всех пользователей из домена contoso. Он также позволяет пользователям, которые являются членами групп contoso\sshusers и contoso\serveroperator.

DenyUsers contoso\admin@192.168.2.23
DenyUsers contoso\*
AllowGroups contoso\sshusers contoso\serveroperators

В приведенном ниже примере пользователи могут выполнить вход с узла 192.168.2.23 и разрешить членам группы sshusers.

AllowUsers localuser@192.168.2.23
AllowGroups sshusers

AuthenticationMethods

Для Windows OpenSSH доступны password только доступные методы проверки подлинности.publickey

Внимание

Проверка подлинности с помощью учетной записи Microsoft Entra в настоящее время не поддерживается.

AuthorizedKeysFile

Значение по умолчанию — .ssh/authorized_keys. Если путь не является абсолютным, он принимается относительно домашнего каталога пользователя (или пути к изображению профиля), например C:\Users\username. Если пользователь принадлежит группе администраторов, вместо этого используется %programdata%/ssh/administrators_authorized_keys .

Совет

Файл administrators_authorized_keys должен содержать только записи разрешений для учетной записи NT Authority\SYSTEM и BUILDIN\Администратор istrators. Учетная запись NT Authority\SYSTEM должна быть предоставлена полный контроль. Группа безопасности BUILDIN\Администратор istrator требуется для управления авторизованными ключами администраторами, вы можете выбрать необходимый доступ. Чтобы предоставить разрешения, можно открыть запрос PowerShell с повышенными привилегиями и выполнить команду icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F".

ChrootDirectory (добавлена поддержка в версии 7.7.0.0)

Эта директива поддерживается только для сеансов SFTP. Удаленный сеанс в cmd.exe не будет учитывать ChrootDirectory. Чтобы настроить сервер chroot только для SFTP, укажите параметр ForceCommand со значением internal-sftp. Вы также можете настроить SCP с поддержкой chroot, реализовав пользовательскую оболочку, которая допускает только SCP и SFTP.

GSSAPIAuthentication

Аргумент GSSAPIAuthentication конфигурации указывает, разрешена ли проверка подлинности пользователя на основе GSSAPI. Значение по умолчанию GSSAPIAuthentication — нет.

Проверка подлинности GSSAPI также требует использования коммутатора -K , указывающего имя узла при использовании клиента OpenSSH. Кроме того, можно создать соответствующую запись в конфигурации клиента SSH. В Windows клиент OpenSSH считывает данные конфигурации из %userprofile%.ssh\config по умолчанию.

Ниже приведен пример конфигурации клиента GSSAPI OpenSSH.

# Specify a set of configuration arguments for a host matching the pattern SERVER01.contoso.com
# Patterns are case sensitive
Host SERVER01.contoso.com
    # Enables GSSAPI authentication
    GSSAPIAuthentication yes
    # Forward (delegate) credentials to the server.
    GSSAPIDelegateCredentials yes

Внимание

GSSAPI доступен только начиная с Windows Server 2022, Windows 11 и Windows 10 xxxx.

HostKey

По умолчанию используются следующие значения:

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

Если значения по умолчанию отсутствуют, sshd автоматически создает их при запуске службы.

Поиск совпадений (Match)

Соответствует условиям с помощью одного или нескольких критериев. При совпадении применяются последующие аргументы конфигурации. Совпадения используют правила шаблона, описанные в разделе AllowGroups, AllowUsers, DenyGroups, DenyUsers . Имена пользователей и групп должны быть в нижнем регистре.

PermitRootLogin

Неприменимо в ОС Windows. Чтобы предотвратить вход администраторов, используйте директиву DenyGroups Администратор istrators.

SyslogFacility

Если вам требуется ведение журнала в файле, используйте LOCAL0. Журналы создаются в разделе %programdata%\ssh\logs. Любое другое значение, включая используемое по умолчанию AUTH, направляет журналы в ETW. Дополнительные сведения см. в статье о возможностях по ведению журнала в Windows.

Аргументы конфигурации

Следующий аргумент конфигурации доступен начиная с Windows Server 2022, Windows 11 и Windows 10 xxxx:

  • GSSAPIAuthentication

Следующие аргументы конфигурации недоступны в версии OpenSSH, которая поставляется в Windows Server и клиенте Windows:

  • AcceptEnv
  • AllowStreamLocalForwarding
  • AuthorizedKeysCommand
  • AuthorizedKeysCommandUser
  • AuthorizedPrincipalsCommand
  • AuthorizedPrincipalsCommandUser
  • Сжатие
  • ExposeAuthInfo
  • GSSAPICleanupCredentials
  • GSSAPIStrictAcceptorCheck
  • HostbasedAcceptedKeyTypes
  • HostbasedAuthentication
  • HostbasedUsesNameFromPacketOnly
  • IgnoreRhosts
  • IgnoreUserKnownHosts
  • KbdInteractiveAuthentication
  • KerberosAuthentication
  • KerberosGetAFSToken
  • KerberosOrLocalPasswd
  • KerberosTicketCleanup
  • PermitTunnel
  • PermitUserEnvironment
  • PermitUserRC
  • PidFile
  • PrintLastLog
  • PrintMotd
  • RDomain
  • StreamLocalBindMask
  • StreamLocalBindUnlink
  • StrictModes
  • X11DisplayOffset
  • X11Forwarding
  • X11UseLocalhost
  • XAuthLocation