WinRM (Windows Remote Management) — это служба Windows, которая позволяет удаленно управлять компьютерами через WS-Management (WSMan).
Она основана на HTTP (порт 5985) и HTTPS (порт 5986) и используется для удаленного администрирования, например, через PowerShell Remoting.
Порт 5985 (wsman) открыт по умолчанию
По умолчанию WinRM работает только в локальной сети и требует настройки доверенных хостов или доменного окружения.
На удаленном компе от админа
Enable-PSRemoting -Force
Если ошибка:Исключение брандмауэра WinRM не будет работать, поскольку одно из сетевых подключений, установленных для этого компь ютера, является общим. Измените тип сетевого подключения либо на доменное, либо на частное и повторите попытку.
Проверяем сетевые профили
Get-NetConnectionProfile |
Format-Table InterfaceAlias,InterfaceIndex,NetworkCategory,IPv4Connectivity -AutoSize
получаем номер InterfaceIndex, например 16
Исправляем
Set-NetConnectionProfile -InterfaceIndex 16 -NetworkCategory Private
Повторяем
Enable-PSRemoting -Force
Допутим IP удаленного компа 10.112.1.3
Test-NetConnection -ComputerName 10.112.1.3 -Port 5985
Если подключения нет нужно на целевом компе проверить файрвол, откуда идет подключение
файрвол на целеовом компе
Выясняем IP адрес, откуда мы подключались
Get-Content "$env:windir\System32\LogFiles\Firewall\pfirewall.log" -Tail 100 | Select-String '5985'
если ошибка
Get-NetFirewallProfile |
Select-Object Name, Enabled, LogFileName, LogBlocked, LogAllowed
Для диагностики WinRM достаточно записывать заблокированные соединения:
Set-NetFirewallProfile -Profile Domain,Private,Public -LogBlocked True
Если нужно видеть также успешные соединения:
Set-NetFirewallProfile -Profile Domain,Private,Public -LogAllowed True
Проверим расположение файла:
Get-NetFirewallProfile |
Select-Object Name,LogFileName,LogBlocked,LogAllowed
Добиться получекния
Test-NetConnection -ComputerName 10.112.1.3 -Port 5985 ComputerName : 10.112.1.3 RemoteAddress : 10.112.1.3 RemotePort : 5985 InterfaceAlias : OpenVPN Data Channel Offload SourceAddress : 192.168.218.11 TcpTestSucceeded : True
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP' -RemoteAddress '192.168.218.11'
Set-NetFirewallRule -Name 'WINRM-HTTP-In-TCP-PUBLIC' -RemoteAddress '192.168.218.11'
Если ошибка, Набор правил брандмауэра может отличаться в зависимости от версии Windows и конфигурации системы.
Проверим существующие правила WinRM
Get-NetFirewallRule |
Where-Object {
$_.Name -like '*WINRM*'
} |
Select-Object Name,DisplayName,Enabled,Profile,Action |
Format-Table -AutoSize
Теперь порт WinRM доступен — сетевая часть настроена.
Для следующего шага укажите имя целевого Windows-компьютера и имя административной учётной записи.
На целевой машине их можно узнать командами:
whoami
На целевом
New-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' -Name LocalAccountTokenFilterPolicy -PropertyType DWord -Value 1 -Force
Теперь на своём компьютере, где запущен Codex, откройте Windows PowerShell от имени администратора под своим пользователем
Start-Process powershell.exe -Verb RunAs
Выполните по одной строке:
Start-Service WinRM
Добавьте только адрес сервера в TrustedHosts, сохранив существующие записи: (10.112.1.3 - Ip целевого сервера)
Set-Item WSMan:\localhost\Client\TrustedHosts -Value '10.112.1.3' -Concatenate -Force
Введите пароль учётной записи сервера в открывшемся окне:
$cred = Get-Credential -UserName 'srv\Username' -Message 'Доступ к серверу srv'
Проверьте выполнение команд:
Invoke-Command -ComputerName 10.112.1.3 -Authentication Negotiate -Credential $cred -ScriptBlock { hostname; whoami }
$cred | Export-Clixml -LiteralPath 'G:\info\srv.credential.xml'
Открыть интерактивную сессию:
Enter-PSSession -ComputerName 10.112.1.3 -Authentication Negotiate -Credential $cred
После этого команды выполняются на сервере srv. Например:
Get-Process xmrig
Выйти обратно на свой компьютер:
Exit-PSSession
Если вы закрыли окно с переменной $cred, сначала снова введите учётные данные:
$cred = Get-Credential -UserName 'srv\Username'