Удаленное подключение к компьютерам через PowerShell Remoting в рабочей группе (без домена)

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

В нашем примере в локальной сети на базе рабочей группы Windows есть два хоста:

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

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

Прежде всего нужно включить и настроить WinRM на удаленном компьютере. Включить WinRM на удаленном компьютере придется локально или удаленно (например, через RDP или psexec).

Проверьте, что на компьютере запущена служба 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.

включить WInRM на компьютере Windows в рабочей группе

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

Если для сетевого подключения на компьютере установлен тип сети Public (общедоступная), то при включении 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.

Вам нужно изменить тип сети на частную (private) ( Set-NetConnectionProfile -NetworkCategory Private ), или использовать команду:

Enable-PSRemoting –SkipNetworkProfileCheck.

Откройте порт (TCP 5985) для подключения к WinRM в Windows Defender Firewall. Проще всего открыть порт с помощью 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 проверка подключения через PSRemoting

Однако, если попытаться удаленно подключиться к компьютеру пользователя с помощью команд 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.

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

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

kerberos и ntlm аутентфикация в winrm

Чтобы работала 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

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

удаленное подключение powershell remoting в рабочей группе Windows

С помощью 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:\PS\Scripts\GetComputerInfo.ps1

Также вы можете использовать в WinRM протокол HTTPS для подключения к удаленным компьютерам. Для этого нужно выпустить SSL сертификат на удаленном компьютере и импортировать его на компьютер администратора. В этом случае не нужно добавлять адрес удаленного компьютера в 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:Password
  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(v6 и v7) вы можете использовать протокола Secure Shell (SSH) для подключения к удаленному компьютеру через PowerShell Remoting. Для этого в Windows должен быть включен встроенный SSH сервер. Можно даже аутентифицироваться по SSH с помощью RSA ключа:

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

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

Предыдущая статья Следующая статья


Комментариев: 7 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)