WinRM (Windows Remote Management) — это служба Windows, которая позволяет удаленно управлять компьютерами через WS-Management (WSMan).

Она основана на HTTP (порт 5985) и HTTPS (порт 5986) и используется для удаленного администрирования, например, через PowerShell Remoting.

Порт 5985 (wsman) открыт по умолчанию

По умолчанию WinRM работает только в локальной сети и требует настройки доверенных хостов или доменного окружения.

  1. Включаем службу PSRemoting

    На удаленном компе от админа

    Enable-PSRemoting -Force

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

    Проверяем сетевые профили

    Get-NetConnectionProfile | Format-Table InterfaceAlias,InterfaceIndex,NetworkCategory,IPv4Connectivity -AutoSize

    получаем номер InterfaceIndex, например 16

    Исправляем

    Set-NetConnectionProfile -InterfaceIndex 16 -NetworkCategory Private

    Повторяем

    Enable-PSRemoting -Force

  2. Подключаемся с лкального на удалееный комп

    Допутим 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
    
  3. Добваить полученные IP адреса на целевом комьютере

    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 доступен — сетевая часть настроена.

    old info


    Для следующего шага укажите имя целевого 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'