Порты WinRM: Руководство по настройке по умолчанию и настройке

WinRM и PowerShell Remoting – важная функция при управлении удаленными компьютерами под управлением Windows. Как и другие службы, WinRM прослушивает определенные порты в определенных обстоятельствах. В этом руководстве вы узнаете о портах WinRM и даже о том, как их изменить, если это необходимо.

Связанные: PowerShell Remoting: Полное руководство

Слушатель WinRM

Один из самых важных компонентов WInRM (и портов, на которых он работает), это слушатель WinRM.

Слушатель WinRM в своей основе является веб-сервером. Он общается с HTTP и HTTPS, и в дни до Windows 7 он даже использовался по умолчанию теми же портами 80 и 443, которые используют большинство веб-серверов.

Слушатель работает как служба на вашем компьютере, ожидая установления соединений, так же как обычный веб-сервер.

A WinRm listener can listen two different ways; HTTP or HTTPS. The WinRM port for HTTP is 5985 while the WinRm port for HTTPS is 5986, by default.

  • HTTP – порт 5985
  • HTTPS – порт 5986

Связанные: PowerShell Remoting: Полное руководство

Ошибки при подключении к неправильным портам

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

Изменение портов WinRM

Хотя Microsoft рекомендует оставаться на портах прослушивания по умолчанию для совместимости и удобства использования, вы можете их изменить. Это может быть полезно в случаях конфликта с портами по умолчанию или ограничения брандмауэра, блокирующего использование этих портов.

Возможно, у вас настроена система, которая настроена на подключение к WinRM через пользовательские порты. Когда вы пытаетесь подключиться как обычно, вы получаете следующее сообщение об ошибке:

Failed WinRM connection due to wrong port

Если это так, пришло время изменить порт WinRM на стороне сервера!

Чтобы изменить порты WinRM, сначала вам нужно определить, есть ли уже служба, прослушивающая эти порты.

Отслеживание существующих подключений

Самый простой способ узнать, какие порты используются на компьютере под управлением Windows, – использовать инструмент netstat . Netstat проверяет все активные порты на вашей системе и, если они активны, возвращает используемый исходный и конечный IP-адрес и порт.

Чтобы отследить прослушивающие порты до изменения постов WinRm, выполните netstat -aon. Переключатели -aon:

  • показывают все активные подключения (a)
  • показывают идентификатор процесса для процесса, который открыл соединение (o)
  • не пытайтесь разрешать имена DNS конечных IP-адресов (n)
Running netstat to find listening connections

Если веб-сервер прослушивает порт 80, например, вы увидите строку, где локальный адрес заканчивается на :80 в столбце Local Address. Эта строка – это то место, где вы увидите PID или идентификатор процесса, который использует соединение.

Как только у вас есть PID, вы можете использовать его для нахождения имени процесса с помощью чего-то вроде cmdlet Get-Process в PowerShell.

Running Get-Process to find process name

В данном случае видно, что имя процесса – просто System. Это означает, что процесс тесно интегрирован в ОС и, вероятно, встроен в Windows.

Настройка портов совместимости для WinRM

У WinRM есть функция, называемая порты совместимости. Они существуют для обеспечения обратной совместимости с некоторыми устаревшими системами, которые работают только на портах 80 для HTTP и 443 для HTTPS. Если вам нужно изменить WinRM для прослушивания этих портов, включите соответствующие слушатели.

Как только вы убедитесь, что на портах 80 и 443 ничего больше не работает, установите слушателя WSMan для использования портов совместимости (80 для HTTP и 443 для HTTPS).

Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpListener -Value $true
 Set-Item WSMan:\localhost\Service\EnableCompatibilityHttpsListener -Value $true

Настройка WinRM для прослушивания любого порта

Если по какой-то причине вам нужно настроить WinRM для прослушивания нестандартного порта, вы можете сделать это следующим образом:

  1. Найдите имя слушателя. Вы можете сделать это, перечислив все слушатели WinRM с помощью cmdlet Get-Item. Приведенная ниже команда перечисляет все (*) установленные слушатели.
Get-Item WSMan:\localhost\Listener*
Getting all existing WinRm listeners

Затем, используя показанное выше имя слушателя, настройте каждого слушателя с помощью Set-Item, указав путь слушателя и номер порта для его изменения.

Set-Item WSMan:\localhost\Listener\\Port -Value 

3. В данный момент слушатели WinRM слушают правильные порты, скорее всего, брандмауэр Windows отклоняет любые удаленные подключения к этим портам. Вам нужно открыть эти порты. Для этого выполните следующую команду.

$FirewallParam = @{
     DisplayName = 'Custom WinRM Port Rule'
     Direction = 'Inbound'
     LocalPort = 
     Protocol = 'TCP'
     Action = 'Allow'
     Program = 'System'
 }
 New-NetFirewallRule @FirewallParam

Связанный: Отключение брандмауэра Windows: узнайте о многих способах

Если бы вы не открыли соответствующий порт брандмауэра Windows, вы получили бы сообщение вроде этого при попытке подключения:

Failed WinRM connection due to Windows firewall

Подключение к пользовательскому порту с помощью PSRemoting

Теперь, когда вы успешно настроили и сконфигурировали WinRM на сервере WinRM, вам нужно проверить подключение с помощью клиента WinRM. Для этого требуется всего один дополнительный параметр; Port.

Используя любую из команд PSRemoting, такие как Invoke-Command или Enter-PSSession, укажите параметр Port и порт, настроенный для успешного установления соединения.

Enter-PSSession -ComputerName <hostname> -Port 1111
Successful WinRm connection

Связанный: Invoke-Command: Лучший способ запуска удаленного кода

Source:
https://adamtheautomator.com/winrm-port/