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/
Команды типа netstat или аналог в Powershell 'Get-NetTCPConnection' выводит данные о фактически запущенных сервисах, которые слушают порты. В случае 5986 может появится ошибка т.к. он не настраивается через команды типа 'winrm qc'. Это делается отдельно.
Get-NetTCPConnection -LocalPort 5985,5986
Через команды ниже мы выведем настройки самого сервиса.
winrm get winrm/config
winrm enumerate winrm/config/Listener
Изменение портов
В первую очередь, перед изменением порта, проверяем, что сокет не занят другим сервисом. В рамках статьи будет настраиваться порт 657. Вы можете изменить его на другой. Проверяется порт следующим образом.
Get-NetTCPConnection -LocalPort 657
Если порт занят, то вы можете узнать идентификатор процесса, а затем его наименование, с помощью следующих команд.
Get-NetTCPConnection -LocalPort 5985 | % {Get-Process -Id $PSitem.OwningProcess}
Для 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
Для остальных случаев
Что бы изменить порт на другой, выполняем команду ниже. Команда выведет название объекта, который нужно будет изменить. Если у вас работает https, то в результатах появится 2 объекта. Со включенным режимом совместимости 4 и т.д.
Get-Item WSMan:\localhost\Listener\*
Если у вас несколько объектов и вы точно не знаете какой нужен, то можете вывести название текущего настроенного порта. Для этого вам нужно подставить название 'Name' по следующему примеру:
Get-Item WSMan:\localhost\Listener\Listener_1084132640\Port
Для изменения значения используем команду 'Set-Item', где указываем название объекта и номер порта. В моем случае 'Listener_1084132640' и '657'.
Set-Item WSMan:\localhost\Listener\Listener_1084132640\Port -Value 657
Выполнение команды нужно будет подтвердить. Объект с указанным названием будет удален, а вместо него будет создан новый listener.
Изменения можно увидеть выполнив команду по выводу конфигурации сервиса.
winrm enumerate winrm/config/Listener
Если у вас включен фаервол, то может понадобиться добавить разрешение на входящее подключение.
$port = 657
New-NetFirewallRule -DisplayName 'Custom WinRM Port Rule' `
-Direction 'Inbound' `
-LocalPort $port `
-Protocol 'TCP' `
-Action 'Allow' `
-Program 'System'
Проверить изменения можно через команду PSRemoting для удаленного управления.
$credential = $(Get-Credential)
Enter-PSSession -ComputerName '192.168.2.90' -Credential $credential -Port 657
Ошибок связанных с 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.
...
Подписывайтесь на наш Telegram канал
Теги: #powershell