Windows powershell как подключиться к серверу



Enter-PSSession: интерактивное управление удаленным компьютером из PowerShell

Командлет Enter-PSSession позволяет создать постоянную интерактивную PowerShell сессию с удаленным компьютером. Все команды, которые вы вводите в вашей командной строке, выполняются на удаленном компьютере. В этой статье мы рассмотрим основные возможности и особенности использования командлета Enter-PSSession для удаленного управления компьютерами с Windows 10 и Windows Server 2019/2016.

Для подключения в самом простом случае нужно указать только имя компьютера (параметр ComputerName). Чтобы подключиться к удаленному компьютеру, достаточно выполнить команду:

Если у текущего пользователя есть полномочия на подключение к удаленному серверу, вы подключитесь к удаленному компьютеру.

Можно перед подключением запросить учетные записи пользователя:

Enter-PsSession –ComputerName hq-srv01.contoso.com –Credentials contoso\kbuldogov

$creds = Get-Credential
Enter-PSSession -ComputerName hq-srv01 -Credential $creds

Обратите внимание, что в начале командной строки PowerShell теперь в квадратных скобках указывается имя удаленного компьютера ( [hq-srv01.contoso.com] ). Это позволяет понять, работаете ли вы в локальной сессии или в удаленной.

В вашей консоли отображаются результаты всех команд, выполненных удаленно. Можно выполнить команду hostname и убедится, что вы выполнили команду на удаленном компьютере.

В этой интерактивной командной строке вы можете выполнять любые команды (в соответствии со своими полномочиями).

Можно изменить настройки DNS на удаленном компьютере:

Set-DNSClientServerAddress –InterfaceIndex 6 –ServerAddresses 192.168.13.4, 192.168.100.4

Чтобы завершить интерактивную сессию удаленного управления, нужно выполнить команду Exit-PSSession или exit. Строка-приглашение PS примет свой обычный вид, и вы вернетесь к своей локальной PowerShell консоли:

В Windows Server 2016/2019 PowerShell Remoting включен по умолчанию (это видно в консоли Server Manager -> Local Server -> Remote Management = Enabled).

В десктопных версиях Windows (Win10, Win11) PSRemoting и служба WinRM отключены.

Вы можете проверить, включен ли PSremoting на текущем компьютере:

Данная команда также позволяет получить список пользователей и групп, которым разрешено подключаться через WinRM. Для использования PSRemoting учетная запись пользователя должна состоять в группе Administrators или Remote Management Users . Особенности удаленного использования WinRM без прав администратора описаны здесь.

Вы можете протестировать, можно ли подключится через PowerShell Remoting к вашему компьютеру локально:

Test-WSMan -ComputerName localhost

Если команда вернет версию схемы WSMan, значит удаленные подключения к этому компьютеру через PS Remoting разрешены.

Если PowerShell Remoting отключен или не настроен, появился ошибка:

Чтобы включить PowerShell Remoting, выполните команду:

  • Включает службу WinRM и настраивает ее на автозапуск;
  • Создает точку подключения на стандартном порту WinRM (TCP/5985 для HTTP трафика);
  • Добавляет исключения в Windows Firewall для WS-Management (если вы настраиваете PSRemoting вручную, добавьте правило самостоятельно);
  • Разрешает удаленные PowerShell сессии;
  • Перезапускает службу WinRM.

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

Get-Service WinRM | Select MachineName,Name,Status, StartType

Enable-PSRemoting -SkipNetworkProfileCheck -Force

В домене Active Directory проще всего настроить Windows Remote Management (PSRemoting) на серверах и компьютера централизованно с помощью групповой политики.

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

Enter-PSSession -HostName kbuldogov@hq-srv01.contoso.com

Enter-PSSession -HostName kbuldogov@hq-srv01.contoso.com:22 -KeyFilePath c:\PS\your_rsa_key

Enter-PSSession можно использовать совместно с командой New-PSSession:

$s = New-PSSession -ComputerName hq-srv01.contoso.com
Enter-PSSession -Session $s

Enter-PSSession поддерживает несколько способов аутентификации. Вы можете задать нужный способ с помощью параметра -Authentication . Поддерживаются Basic, Digest, Kerberos, CredSSP, NegotiateWithImplicitCredential, Negotiate Challenge.

В примере выше мы показали пример интерактивного подключения Enter-PSSession между компьютерами в одном домене Windows (для подключения достаточно указать FQDN или короткое имя, используется Kerberos аутентфикация). Если попробовать подключиться к удаленному компьютеру по IP адресу или CNAME, аутентификация не пройдет:

Для подключения к удаленному компьютеру по IP можно добавить этот хост в список доверенных (Trusted Hosts) или использовать SSL (более безопасно).

Чтобы добавить IP адрес в доверенные, выполните команду:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 192.168.13.5

Можно добавить в доверенные хосты по маске

Set-Item WSMan:\localhost\Client\TrustedHosts -Value *.winitpro.ru

Вывести список доверенных хостов:

Аналогично нужно добавить ваш хост в доверенные на удаленном компьютере.

Чтобы подключиться к удаленному компьютеру по IP адресу, используйте такую команду:

Enter-PSSession -ComputerName 192.168.13.5 -Credential (Get-Credential -UserName contoso\kbuldogov)

Командлеты Enter-PSSession и New-PSSession создают постоянную сессию типа один к одному и используются в основном в интерактивных сценариях. Если вам нужно автоматизация, или есть задачи, которые нужно выполнить сразу на множестве удаленных компьютерах, используйте командлет Invoke-Command.

Источник

Удаленное управление через Powershell

В Powershell есть несколько методов удаленного подключения. Это через:

Сегодня мы поговорим о PS remoting/WinRM. В его состав входит, в основном, два командлета — это:

Этот командлет устанавливает сессию c удаленным компьютером и мы сможем работать прям на нем. Если сравнивать с Linux, то это почти одно и то же:

И второй командлет, который нужен для удаленного выполнения команд как на одном, так и сотни компьютеров:

Где:
-ComputerName — имена компьютеров (или одного)
-Scriptblock — скрипт или командлет в скобках <>

Если опять же сравнить с Linux ssh, то это почти одно и то же:

Как настроить удаленное управление через Powershell?

Для того что бы суметь настроить нужно понять как это работает. Команды выше могут работать по протоколу HTTP (по порту 5985) и HTTPS (5986), за исключением версии Powershell 1.0, который работал в XP (там порт 80/443). По умолчанию у нас стоит HTTP, но и эти данные шифруются используя симметричный ключ AES-256. Сама аутентификация работает в 2 режимах NTLM и Kerberos(по умолчанию стоит он). Если у вас сеть с домен контроллером, т.е. есть Kerberos, то у вас должны работать команды выше. Если компьютеры в Workgroup, то они используют NTLM и для этого нужна дополнительная настройка. Кроме того, если вы вместо имен используете IP, то вы в любом случае используете NTLM и это по умолчанию не работает.

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

Если не запушен:

В этом случае мы ставим запуск сервиса автоматически и настраиваем winrm в дефолтной конфигурации. Этот сервис дает возможность принимать команды Powershell и устанавливать сеансы.

Если вы работаете под профилем сети «Public» (не «Domain» или «Private»), то нужно выполнить еще один командлет, разрешающий работать в таких сетях:

Если мы выполним такую команду:

Получим ошибку:
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 компьютера с которого хотим запустить команду. Для этого делаем:

После этого все будет работать, но команды должны исполняться с переменной, в которой будут лежать учетные данные пользователя. Т.е. так:

Где:
$cred — это переменная, куда мы сохраняем данные с формы Get-Credential
-Credential — сюда мы передаем переменную

Так же отмечу, что все команды, которые мы запускаем для удаленного выполнения через Poweshell, должны происходить от члена группы Администратора того хоста, к которому мы подключаемся.

Теперь мы можем устанавливать множество сессий с помощью командлета:

Получать ID этих сессий:

И подключаться по этим ID:

Или использовать с invoke существующую сессию, а командлет для удаленного компьютера запускать с файла:

А так же, т.к. WinRM настроен, выполнять командлеты где есть ключ -ComputerName, сразу на нескольких компьютерах. Этот командлет пропингует AD сразу с нескольких компьютеров:

Или же использовать методы описанные выше.

Дополнительные ключи мы можем узнать по командлетам:

Источник

about_Remote

Short description

Describes how to run remote commands in PowerShell.

Long description

You can run remote commands on a single computer or on multiple computers by using a temporary or persistent connection. You can also start an interactive session with a single remote computer.

This topic provides a series of examples to show you how to run different types of remote command. After you try these basic commands, read the Help topics that describe each cmdlet that is used in these commands. The topics provide the details and explain how you can modify the commands to meet your needs.

Note: To use PowerShell remoting, the local and remote computers must be configured for remoting. For more information, see about_Remote_Requirements.

HOW TO START AN INTERACTIVE SESSION (ENTER-PSSESSION)

The easiest way to run remote commands is to start an interactive session with a remote computer.

When the session starts, the commands that you type run on the remote computer, just as though you typed them directly on the remote computer. You can connect to only one computer in each interactive session.

To start an interactive session, use the Enter-PSSession cmdlet. The following command starts an interactive session with the Server01 computer:

The command prompt changes to indicate that you are connected to the Server01 computer.

Now, you can type commands on the Server01 computer.

To end the interactive session, type:

For more information, see Enter-PSSession.

HOW TO USE CMDLETS THAT HAVE A COMPUTERNAME PARAMETER TO GET REMOTE DATA

Several cmdlets have a ComputerName parameter that lets you get objects from remote computers.

Because these cmdlets do not use WS-Management-based PowerShell remoting, you can use the ComputerName parameter of these cmdlets on any computer that is running PowerShell. The computers do not have to be configured for PowerShell remoting, and the computers do not have to meet the system requirements for remoting.

The following cmdlets have a ComputerName parameter:

For example, the following command gets the services on the Server01 remote computer:

Typically, cmdlets that support remoting without special configuration have a ComputerName parameter and do not have a Session parameter. To find these cmdlets in your session, type:

HOW TO RUN A REMOTE COMMAND

To run other commands on remote computers, use the Invoke-Command cmdlet.

To run a single command or a few unrelated commands, use the ComputerName parameter of Invoke-Command to specify the remote computers. Use the ScriptBlock parameter to specify the command.

For example, the following command runs a Get-Culture command on the Server01 computer.

The ComputerName parameter is designed for situation in which you run a single command or several unrelated commands on one or many computers. To establish a persistent connection to a remote computer, use the Session parameter.

HOW TO CREATE A PERSISTENT CONNECTION (PSSESSION)

When you use the ComputerName parameter of the Invoke-Command cmdlet, Windows PowerShell establishes a connection just for the command. Then, it closes the connection when the command is complete. Any variables or functions that are defined in the command are lost.

To create a persistent connection to a remote computer, use the New-PSSession cmdlet. For example, the following command creates PSSessions on the Server01 and Server02 computers and then saves the PSSessions in the $s variable.

HOW TO RUN COMMANDS IN A PSSESSION

With a PSSession, you can run a series of remote commands that share data, like functions, aliases, and the values of variables. To run commands in a PSSession, use the Session parameter of the Invoke-Command cmdlet.

For example, the following command uses the Invoke-Command cmdlet to run a Get-Process command in the PSSessions on the Server01 and Server02 computers. The command saves the processes in a $p variable in each PSSession.

Because the PSSession uses a persistent connection, you can run another command in the same PSSession that uses the $p variable. The following command counts the number of processes saved in $p.

HOW TO RUN A REMOTE COMMAND ON MULTIPLE COMPUTERS

To run a remote command on multiple computers, type all of the computer names in the value of the ComputerName parameter of Invoke-Command. Separate the names with commas.

For example, the following command runs a Get-Culture command on three computers:

You can also run a command in multiple PSSessions. The following commands create PSSessions on the Server01, Server02, and Server03 computers and then run a Get-Culture command in each of the PSSessions.

To include the local computer list of computers, type the name of the local computer, type a dot (.), or type «localhost».

HOW TO RUN A SCRIPT ON REMOTE COMPUTERS

To run a local script on remote computers, use the FilePath parameter of Invoke-Command.

For example, the following command runs the Sample.ps1 script on the S1 and S2 computers:

The results of the script are returned to the local computer. You do not need to copy any files.

HOW TO STOP A REMOTE COMMAND

To interrupt a command, press CTRL+C. The interrupt request is passed to the remote computer where it terminates the remote command.

FOR MORE INFORMATION

For information about the system requirements for remoting, see about_Remote_Requirements.

For help in formatting remote output, see about_Remote_Output.

For information about how remoting works, how to manage remote data, special configurations, security issues, and other frequently asked questions, see PowerShell Remoting FAQ.

For help in resolving remoting errors, see about_Remote_Troubleshooting.

For information about PSSessions and persistent connections, see about_PSSessions.

For information about PowerShell background jobs, see about_Jobs.

Источник

You may also like...