Настройка PowerShell Remoting (WinRM) для компьютеров, не относящихся к домену (рабочей группе)

PowerShell Remoting — это отличный инструмент, который позволяет подключаться и выполнять команды на удаленных компьютерах через WinRM. Если компьютеры подключены к домену Active Directory, то PSRemoting использует Kerberos для аутентификации на удаленных узлах. Однако если ваши компьютеры находятся в рабочей группе, вам придется использовать NTLM (TrustedHosts) или SSL-сертификаты для аутентификации. Давайте рассмотрим, как настроить и использовать PSRemoting (WinRM) в среде рабочей группы (без домена).

В этом примере есть два хоста в рабочей группе Windows:

  • Рабочая станция администратора — 192.168.13.100
  • Компьютер пользователя — 192.168.13.222

Наша задача — удаленно подключиться к компьютеру пользователя с помощью PowerShell Remoting.

Первым шагом будет включение и настройка WinRM на удаленном хосте. Вам придется включить WinRM локально или удаленно (например, с помощью RDP, psexec или GPO).

Убедитесь, что служба WinRM запущена на компьютере целевого пользователя:

Get-Service -Name "*WinRM*" | select status

Если служба не запущена, включите ее:

Enable-PSRemoting

WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.
WinRM has been updated for remote management.
WinRM firewall exception enabled.
Configured LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.

включение psremoting (winrm) на компьютере рабочей группы включить psremoting (winrm) на компьютере рабочей группы

Как видите, опция LocalAccountTokenFilterPolicy UAC автоматически включается, чтобы разрешить удаленный доступ под учетными записями администраторов.

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

Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

Измените тип сети на Частная (Set-NetConnectionProfile -NetworkCategory Private) или выполните приведенную ниже команду:

Enable-PSRemoting –SkipNetworkProfileCheck

Откройте порт TCP/5985 в брандмауэре Windows Defender Firewall для подключения к WinRM. Самый простой способ — открыть порт в брандмауэре Windows с помощью PowerShell. В этом примере мы откроем удаленный доступ только для IP-адреса компьютера администратора (более безопасно), но вы можете открыть его для всех (укажите Any вместо IP-адреса):

Set-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)" -RemoteAddress 192.168.13.100
Enable-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)"

На компьютере администратора убедитесь, что компьютер пользователя теперь принимает удаленные подключения через PSRemoting:

Test-NetConnection 192.168.13.222 –Port 5985
Test-WsMan 192.168.13.222

Test-WsMan - проверка возможности подключения WinRM через PowerShellTest-WsMan - проверка возможности подключения WinRM через PowerShell

Однако при попытке удаленного подключения к пользовательскому компьютеру с помощью команд Invoke-Command или Enter-PSSession возникает следующая ошибка:

Enter-PSSession 192.168.13.222

Enter-PSSession : Connecting to remote server 192.168.13.222 failed with the following error message: The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. PSRemotingTransportException.

WinRM HTTP Listener на удаленном компьютере разрешает подключение только с аутентификацией Kerberos.

Get-ChildItem -Path WSMan:\localhost\Service\Auth\

Типы аутентификации WSMan - Kerberos и negotiateТипы аутентификации WSMan - kerberos и negotiate

Чтобы использовать аутентификацию Negotiate с NTLM, ваш компьютер должен доверять удаленному компьютеру. В домене это достигается с помощью Kerberos, а в среде рабочей группы вам придется добавить IP-адреса компьютеров в TrustedHosts.

Добавьте компьютер пользователя в TrustedHosts на компьютере администратора (для этого можно использовать его IP-адрес или FQDN):

Set-Item wsman:\localhost\client\TrustedHosts -Value 192.168.13.222 -Force

Список компьютеров в TrustedHosts:

get-Item WSMan:\localhost\Client\TrustedHosts

Чтобы очистить список TrustedHosts:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value "" –Force

Чтобы добавить новый компьютер в список TrustedHosts, используйте параметр -Concatenate:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.200 -Concatenate

Вы также можете разрешить удаленное подключение ко всем компьютерам (обычно это не рекомендуется, так как одним из основных недостатков NTLM-аутентификации является уязвимость к различным вредоносным атакам).

Set-Item wsman:\localhost\Client\TrustedHosts -value *

Затем попробуйте подключиться к удаленному компьютеру через PSRemoting:

Enter-PSSession -ComputerName 192.168.13.222 -Credential 192.168.13.222\root

Введите пароль администратора удаленного компьютера и убедитесь, что соединение установлено успешно (имя хоста или IP-адрес удаленного компьютера отображается в приглашении PowerShell).

enter-pssession на компьютере рабочей группыenter-pssession на компьютере рабочей группы

Теперь вы можете выполнять команды и сценарии на удаленных компьютерах рабочей группы с помощью команды Invoke-Command. Например, перезагрузите компьютер удаленно:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222\root –ScriptBlock {Restart-Computer}

Или запустить сценарий PowerShell:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222\root -FilePath c:\Scripts\GetComputerInfo.ps1

В WinRM вы также можете использовать HTTPS для подключения к удаленным компьютерам. Для этого нужно выпустить SSL-сертификат на удаленном компьютере и импортировать его на компьютер администратора. В этом случае вам не нужно добавлять IP-адрес удаленного компьютера в список TrustedHosts. Узнайте больше о том, как настроить PowerShell Remoting (WinRM) по HTTPS.

Обратите внимание, что для аутентификации на удаленном компьютере необходимо ввести пароль пользователя с помощью команды -Credential опция. Если в вашей сети много компьютеров с разными паролями локальных администраторов, удобно хранить пароли подключений в хранилище. Это может быть как хранилище паролей Windows Credential Manager, так и внешнее хранилище, например KeePass, LastPass, HashiCorp Vault, Azure Key Vault или Bitwarden.

Для доступа к сохраненным паролям в таком хранилище можно использовать модуль PowerShell Secret Management. Теперь, чтобы подключиться к удаленному компьютеру через PSRemoting, достаточно:

  1. Сохранить пароль подключения, например, в Credential Manager: cmdkey /add:192.168.13.222 /user:root /pass:Password1
  2. Получите имя и пароль из хранилища с помощью модуля CredentialManager: $psCred = Get-StoredCredential -Target "192.168.13.222"
  3. Подключитесь к удаленному компьютеру, используя PSRemoting и сохраненный пароль: Enter-PSSession -ComputerName 192.168.13.222 -Credential $psCred
Если вы храните пароли в хранилище другого типа, используйте модуль Microsoft.PowerShell.SecretManagement, чтобы получить сохраненные учетные данные.

В новых версиях PowerShell Core (v6 или v7) вы можете использовать протокол Secure Shell (SSH) для подключения к удаленному компьютеру через PowerShell Remoting. Для этого в Windows должен быть включен встроенный SSH-сервер.

[-HostName (вместо -ComputerName) и -UserName (вместо -Credential) позволяют задать имя компьютера и пользователя для SSH-соединения.
Enter-PSSession -HostName 192.168.50.20 -UserName maxbak

Вы даже можете аутентифицироваться в Windows с помощью SSH-ключа (используйте параметр –KeyFilePath параметр, указывающий путь к закрытому SSH-ключу):

Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:\PS\your_rsa_key

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *