Порты используемые WinRM по умолчанию и их изменение


03 марта 2023


Порты WinRM по умолчанию и их изменение

WinRM - это служба для удаленного управления через Powershell. По умолчанию служба работает на одном или двух портах, каждый из которых имеет свое предназначение. Бывает необходимость эти порты изменить. О том как это можно сделать и будет рассмотрено в этой статье.

 

Просмотр текущих настроек портов WinRM

WinRM использует протокол TCP HTTP для обмена данными во время подключения. Изначально могут использоваться следующие порты:

  • 5985 (HTTP);
  • 5986 (HTTPS).

Настройки сервиса через команды quickconfig (qc) включают 5985 порт. Хоть это и HTTP подключение, трафик все равно шифруется используя NTLM или Kerberos.

Вариант с 5986 (HTTPS) используется в случаях, например, если вы хотите сделать аутентификацию через TLS/SSL сертификаты. Этот вариант настраивается отдельно.

Отмечу некоторые моменты, которые так же могут оказаться важными... До Windows 7, WinRM использовал 80 и 443 порт.

Так же часто можно услышать название 'Powershell Remoting', в контексте тех действий, что выполнялись к WinRM. Powershell Remoting (так же называется PSRemoting), это более расширенный функционал, который включает в себя WSMan и WinRM. Т.е. это одни и те же порты.

Посмотреть на работающие порты WinRM можно с нескольких сторон. С помощью следующей команды мы вернем данные по выданным разрешениям в рамках операционной системы.

netsh http show urlacl http://+:5985/wsman/
netsh http show urlacl https://+:5986/wsman/

Разрешения на порты WinRM

Команды типа netstat или аналог в Powershell 'Get-NetTCPConnection' выводит данные о фактически запущенных сервисах, которые слушают порты. В случае 5986 может появится ошибка т.к. он не настраивается через команды типа 'winrm qc'. Это делается отдельно.

Get-NetTCPConnection -LocalPort 5985,5986

Аналог Netstat в Powershell

Через команды ниже мы выведем настройки самого сервиса.

winrm get winrm/config
winrm enumerate winrm/config/Listener

Вывод конфигурации WinRM

 

 

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

В первую очередь, перед изменением порта, проверяем, что сокет не занят другим сервисом. В рамках статьи будет настраиваться порт 657. Вы можете изменить его на другой. Проверяется порт следующим образом.

Get-NetTCPConnection -LocalPort 657

Поиск используемого порта в Powershell с Get-NetTCPConnection

Если порт занят, то вы можете узнать идентификатор процесса, а затем его наименование, с помощью следующих команд.

Get-NetTCPConnection -LocalPort 5985 | % {Get-Process -Id $PSitem.OwningProcess}

Поиск процесса, который использует порт с Powershell

Для 80 и 443

Если вы хотите подключить 80 и 443 TCP порт, то вы можете включить режим совместимости со старыми приложениями. В этом случае у вас так же будут работать 5985 и 5986.

# для 80
Set-Item "WSMan:\localhost\Service\EnableCompatibilityHttpListener" -Value $true
# для 443
Set-Item "WSMan:\localhost\Service\EnableCompatibilityHttpsListener" -Value $true

Включение поддержки 80 и 443 порта в Powershell

Для остальных случаев

Что бы изменить порт на другой, выполняем команду ниже. Команда выведет название объекта, который нужно будет изменить. Если у вас работает https, то в результатах появится 2 объекта. Со включенным режимом совместимости 4 и т.д.

Get-Item WSMan:\localhost\Listener\*

Вывод listner в Powershell и WSMan

Если у вас несколько объектов и вы точно не знаете какой нужен, то можете вывести название текущего настроенного порта. Для этого вам нужно подставить название 'Name' по следующему примеру:

Get-Item WSMan:\localhost\Listener\Listener_1084132640\Port

Для изменения значения используем команду 'Set-Item', где указываем название объекта и номер порта. В моем случае 'Listener_1084132640' и '657'.

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

Изменение порта WinRm с Powershell и WSMan

Выполнение команды нужно будет подтвердить. Объект с указанным названием будет удален, а вместо него будет создан новый listener.

Изменения можно увидеть выполнив команду по выводу конфигурации сервиса.

winrm enumerate winrm/config/Listener

Просмотр настроенного порта WinRM

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

$port = 657
New-NetFirewallRule -DisplayName 'Custom WinRM Port Rule' `
  -Direction 'Inbound' `
  -LocalPort $port `
  -Protocol 'TCP' `
  -Action 'Allow' `
  -Program 'System'

Открытие порта на фаерволле с Powershell

Проверить изменения можно через команду PSRemoting для удаленного управления.

$credential = $(Get-Credential)
Enter-PSSession -ComputerName '192.168.2.90' -Credential $credential -Port 657

Подключение через Enter-PSSession используя другой порт

Ошибок связанных с Win RM и PSRemoting может быть много. Следующая ошибка может говорить, что у вас неверно указан порт или он закрыт на фаерволе:

  • Сбой подключения к удаленному серверу 192.168.2.90. Сообщение об ошибке: WinRM не удается выполнить операцию Убедитесь, что имя компьютера указано правильно, компьютер доступен по сети
  • Connecting to remote server 192.168.2.90 failed with the following error message : WinRM cannot complete the operation. Verify that the specified computer name is valid, that the computer is accessible over the network, and that a firewall exception for the WinRM service is enabled and allows access from this computer. 

...

Теги: #powershell


Каналы
Telegram FixMyPc Telegram Лента FixMyPC RSS Rss
Популярные тэги
О блоге
Этот блог представляет собой конспекты выученного материала, приобретённого опыта и лучшие практики в системном администрировании и программировании.