Как с помощью powershell подключиться к другому компьютеру?
Как с помощью powershell подключиться к другому компьютеру в локальной сети используя имя пользователя и пароль?
И если можно для знающих напишите команду как с помощью wmi удалить шару.
- Вопрос задан более трёх лет назад
- 1908 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 3
Удаленное подключение к компьютерам через PowerShell Remoting в рабочей группе (без домена)
11.01.2022
itpro
PowerShell, Windows 10, Windows Server 2019
комментариев 5
PowerShell Remoting отличный инструмент, который позволяет подключаться и выполнять команды на удаленных компьютерах через WinRM. Если компьютеры находятся в одном домене Active Directory, то PSRemoting использует Kerberos для аутентификации на удалённых хостах. Однако, если ваши компьютеры находятся в рабочей группе, то для аутентификации придется использовать NTLM (TrustedHosts) или SSL сертификаты. В этой статье мы рассмотрим, как настроить PSRemoting для удаленного подключения к компьютеру в рабочей группе.
В нашем примере в локальной сети на базе рабочей группы Windows есть два хоста:
-
Рабочая станция администратора — 192.168.13.100
Наша задача – удаленно подключиться к компьютеру пользователя через PowerShell Remoting.
Прежде всего нужно включить и настроить WinRM на удаленном компьютере. Включить WinRM на удаленном компьютере придется локально или удаленно (например, через RDP или psexec).
Проверьте, что на компьютере запущена служба WinRM:
Get-Service -Name «*WinRM*» | select status
Если служба не запущена, запустите ее:
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.
Как вы видите, автоматически включен параметр 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 ), или использовать команду:
Откройте порт (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
Однако, если попытаться удаленно подключиться к компьютеру пользователя с помощью команд Invoke-Command или Enter-PSSession, появится ошибка:
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\
Чтобы работала Negotiate аутентификация через NTLM ваш компьютер должны доверять удаленному компьютеру. В домене это достигается с помощью Kerberos, а в рабочей группе придется добавить IP адреса компьютера в TrustedHosts.
Добавьте компьютер пользователя в TrustedHosts на компьютере администратора (можно добавить по IP адресу или FQDN):
Set-Item wsman:\localhost\client\TrustedHosts -Value 192.168.13.222 -Force
Вывести список компьютеров в 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 удаленного компьютера).
С помощью Invoke-Command вы можете выполнять команды на удаленных компьютерах. Например, выполнить удалённую перезагрузку компьютера:
Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222\root –ScriptBlock
Или выполнить 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 вам достаточно:
- Сохранить пароль для подключения, например в Credential Manager: cmdkey /add:192.168.13.222 /user:root /pass:Password
- Получить имя и пароль из хранилища с помощью модуля CredentialManager: $psCred = Get-StoredCredential -Target «192.168.13.222»
- Подключиться к удаленному компьютеру через 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 и для обычных пользователей.
Предыдущая статья Следующая статья
Удаленное управление через Powershell
В Powershell есть несколько методов удаленного подключения. Это через:
Сегодня мы поговорим о PS remoting/WinRM. В его состав входит, в основном, два командлета — это:
Enter-PSSession -ComputerName CL1
Этот командлет устанавливает сессию c удаленным компьютером и мы сможем работать прям на нем. Если сравнивать с Linux, то это почти одно и то же:
ssh CL1
И второй командлет, который нужен для удаленного выполнения команд как на одном, так и сотни компьютеров:
Invoke-Command -ComputerName AD,CL1 -ScriptBlock
Где:
-ComputerName — имена компьютеров (или одного)
-Scriptblock — скрипт или командлет в скобках <>
Если опять же сравнить с Linux ssh, то это почти одно и то же:
ssh root@192.168.1.1 'ifconfig'
Как настроить удаленное управление через Powershell?
Для того что бы суметь настроить нужно понять как это работает. Команды выше могут работать по протоколу HTTP (по порту 5985) и HTTPS (5986), за исключением версии Powershell 1.0, который работал в XP (там порт 80/443). По умолчанию у нас стоит HTTP, но и эти данные шифруются используя симметричный ключ AES-256. Сама аутентификация работает в 2 режимах NTLM и Kerberos(по умолчанию стоит он). Если у вас сеть с домен контроллером, т.е. есть Kerberos, то у вас должны работать команды выше. Если компьютеры в Workgroup, то они используют NTLM и для этого нужна дополнительная настройка. Кроме того, если вы вместо имен используете IP, то вы в любом случае используете NTLM и это по умолчанию не работает.
Если у вас не работают команды выше нужно проверить запущен ли сервис WinRM на том компьютере, к которому мы хотим подключиться:
Get-Service -Name "*WinRM*" | fl
Если не запушен:
Enable-PSRemoting
В этом случае мы ставим запуск сервиса автоматически и настраиваем winrm в дефолтной конфигурации. Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.
Если вы работаете под профилем сети «Public» (не «Domain» или «Private»), то нужно выполнить еще один командлет, разрешающий работать в таких сетях:
Set-NetFirewallRule -Name "WINRM-HTTP-In-TCP-PUBLIC" -RemoteAddress Any
Если мы выполним такую команду:
Invoke-Command -ComputerName 192.168.3.100 -ScriptBlock
Получим ошибку:
Connecting to remote server 192.168.3.100 failed with the following error message : The WinRM client cannot process the request. Default authentication may be used with an IP address under the following conditions: the transport is HTTPS or the destination is in the TrustedHosts list, and explicit credentials are provided.
Которая говорит, что мы можем подключится по IP если используем HTTPS (для этого нужен сертификат) или добавить хост, к которому подключаемся в TrustedHost компьютера с которого хотим запустить команду. Для этого делаем:
Set-Item wsman:\localhost\Client\TrustedHosts -value 192.168.3.134
После этого все будет работать, но команды должны исполняться с переменной, в которой будут лежать учетные данные пользователя. Т.е. так:
$cred = Get-Credential Invoke-Command -ComputerName 192.168.3.134 -ScriptBlock -Credential $cred
Где:
$cred — это переменная, куда мы сохраняем данные с формы Get-Credential
-Credential — сюда мы передаем переменную
Так же отмечу, что все команды, которые мы запускаем для удаленного выполнения через Poweshell, должны происходить от члена группы Администратора того хоста, к которому мы подключаемся.
Теперь мы можем устанавливать множество сессий с помощью командлета:
New-PSSession -ComputerName 192.168.3.134 -Credential $cred
Получать ID этих сессий:
Get-PSSession
И подключаться по этим ID:
Enter-PSSession -Id 9
Или использовать с invoke существующую сессию, а командлет для удаленного компьютера запускать с файла:
$cred = Get-Credential $s = New-PSSession -ComputerName 192.168.3.134 -Credential $cred Invoke-Command -Session $s -FilePath c:\scripts\test.ps1
А так же, т.к. WinRM настроен, выполнять командлеты где есть ключ -ComputerName, сразу на нескольких компьютерах. Этот командлет пропингует AD сразу с нескольких компьютеров:
Test-Connection -Source CL1,CL2 -ComputerName AD -Credential $cred
Или же использовать методы описанные выше.
Дополнительные ключи мы можем узнать по командлетам:
Get-Help Enter-PSSession -Examples Get-Command -Noun PSSession
или по powershell invoke
Get-Help Invoke-Command -Examples
PowerShell. О удалённом подключении (about_Remote)
С помощью PowerShell можно выполнить удаленные команды, как на одном компьютере, так и на нескольких компьютерах. Использовать как временное, так и постоянное подключение. Можно так же запустить интерактивный сеанс с одним удаленным компьютером.
В этом разделе приводится ряд примеров, показывающих, как работать с разными типами удаленных команд. Рекомендуется так же прочесть разделы справки, которые описывают каждый командлет, который используется в статье. Эта статья представляет подробную информацию и объясняет, как можно изменять команды под ваши потребности.
Примечание: Для использования Windows PowerShell Remoting, локальные и удаленные компьютеры должны быть настроены на удаленное взаимодействие. Для получения дополнительной информации см about_Remote_Requirements.
Как начать интерактивный сеанс (ENTER-PSSESSION)
Самый простой способ выполнять удаленные команды — это начать интерактивный сеанс с удаленным компьютером.
Когда начинается сессия, команды которые вы вводите, выполняются на удаленном компьютере, как если бы вы набрали их непосредственно на удаленном компьютере. Вы можете подключиться только к одному компьютеру в каждом интерактивном сеансе.
Чтобы начать интерактивный сеанс, используйте командлет Enter-PSSession.
Следующая команда начинает интерактивный сеанс с компьютером Server01: