Um Guia Detalhado para Começar com o PowerShell Remoto

Você já quis executar comandos do PowerShell em uma máquina remota do conforto da sua estação de trabalho? Bem, com o PowerShell Remoting, você pode. Com o PowerShell remoto, você pode executar comandos e scripts em vários sistemas remotos de forma sustentável.

Parece interessante? Continue lendo para aprender como domar essas máquinas remotas do modo PowerShell.

Pré-requisitos

Este tutorial será uma demonstração prática. Se você deseja acompanhar, certifique-se de ter pelo menos três computadores com PowerShell 7. Um será seu computador de gerenciamento e os outros dois serão as máquinas remotas.

Este tutorial utilizará os seguintes computadores.

  • A Windows 10 PC with PowerShell 7 installed as the management computer. You will launch remote commands from this machine.
  • A Windows 10 PC with PowerShell 7 installed. This machine will be the endpoint for remote PowerShell over WinRM.
    • A user account on the remote Windows machine with local administrator rights. This tutorial uses a user account called ma.
  • Linux Máquina com SSHD ativado para funcionar como um ponto de extremidade remoto do PowerShell via SSH. Este tutorial utiliza o Fedora 35.
    • Uma conta de usuário para executar comandos remotos na máquina Linux. A conta deve ter acesso sudo e SSH. Este tutorial utiliza uma conta chamada test. Crie uma conta de usuário neste ponto, se você não tiver uma em sua máquina Linux.

Habilitando o PowerShell Remoto no Windows via WinRM

Ao instalar o PowerShell 7, há uma opção para habilitar a comunicação remota do PowerShell, e você pode tê-la ativado naquele momento. No entanto, para ter certeza, siga as etapas abaixo para habilitar o PowerShell remoto.

1. Faça login no PC remoto com Windows 10.

2. Abra o PowerShell como administrador.

3. Execute o comando abaixo para habilitar o PowerShell remoto.

Enable-PSRemoting

O comando executa várias alterações de configuração, que você verá no console.

Enabling Remote PowerShell on Windows over WinRM

Ativando o PowerShell Remoto no Linux via SSH

O WinRM é exclusivo do Windows, o que significa que você não pode habilitar o PowerShell remoto no Linux com ele. Em vez disso, você pode habilitar o PowerShell remoto via SSH no Linux. Supondo que você já tenha instalado o PowerShell, siga as etapas abaixo.

1. Faça login no seu sistema Linux remoto e abra uma sessão de terminal.

2. Abra o arquivo de configuração do servidor SSH em um editor de texto. Use o editor de texto de sua escolha, como Gedit, Sublime ou Nano. Este exemplo usa o Gedit.

sudo nano /etc/ssh/sshd_config

3. Em seguida, adicione a linha abaixo ao arquivo. Essa linha cria um subsistema SSH que hospeda um processo do PowerShell.

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Create an SSH subsystem for PowerShell on Linux

4. Feche o editor.

5. Por fim, reinicie o servidor SSH executando o seguinte comando.

sudo systemctl restart sshd

Adicionando Hosts Confiáveis para o PowerShell Remoto na Máquina Local

Neste ponto, seu computador remoto está pronto para receber comandos. No entanto, seu computador de gerenciamento pode recusar a conexão com os hosts do PowerShell remoto se eles não estiverem na lista de Hosts Confiáveis. Para evitar possíveis problemas de remoção, você deve adicionar os hosts remotos à sua lista de Hosts Confiáveis.

Abra o PowerShell como administrador no seu computador de gerenciamento.

Execute o comando winrm abaixo. Este comando adiciona suas máquinas Windows remota (192.168.8.107) e Linux (192.168.8.171) à lista de hosts confiáveis do seu computador.

winrm set winrm/config/client '@{TrustedHosts=" 192.168.8.171,192.168.8.107"}'
Adding remote machines as Trusted Hosts

Executando Comandos em Computadores Remotos

Com todas as peças no lugar, você executará comandos na máquina remota nesta seção.

1. Abra uma nova sessão do PowerShell no seu computador de gerenciamento.

2. Agora, execute o comando Invoke-Command abaixo para listar os cinco primeiros serviços na máquina remota como usuário ma. O comando a ser executado aparece entre chaves do switch ScriptBlock, como mostrado abaixo.

Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Windows host

3. Para fazer o mesmo com um host Linux remoto, execute o comando abaixo. Observe que -HostName substituiu -ComputerName, e -UserName substituiu -ComputerName. Esses parâmetros indicam ao cmdlet Invoke-Command que o alvo é um host SSH.

Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -ScriptBlock { Get-Process | Select-Object -First 5 }
Listing the processes on the remote PowerShell Linux host

Executando Scripts em Computadores Remotos

Você também pode executar um arquivo de script do PowerShell em um computador remoto com o cmdlet Invoke-Command. Mas, em vez de especificar o parâmetro -ScriptBlock, você especificará o parâmetro -FilePath seguido do caminho local do script.

1. Primeiro, crie um arquivo de script do PowerShell chamado nametime.ps1 no seu computador local.

2. Abra o script no seu editor de script preferido e adicione o seguinte código. Salve o arquivo depois.

# nametime.ps1
hostname
Get-Date
Create the PowerShell script

3. Execute o cmdlet Invoke-Command com o parâmetro -FilePath. O -FilePath deve apontar para o arquivo de script. Neste exemplo, o arquivo de script está no mesmo diretório de trabalho.


# Invocar o script no PowerShell remoto via WinRM

Invoke-Command `
    -ComputerName 192.168.8.107 `
    -Credential 'ma' `
    -FilePath .\nametime.ps1


# Invocar o script no PowerShell remoto via SSH

Invoke-Command `
    -HostName 192.168.8.171 `
    -UserName 'test' `
    -FilePath .\nametime.ps1
Invoke a script on remote PowerShell hosts

Gerenciando um Computador Remoto de Forma Interativa

Na seção anterior, você viu como executar comandos individuais em uma máquina remota. Nesta seção, você aprenderá a abrir uma sessão interativa, de modo que você possa executar vários comandos na máquina remota como se fosse local.

1. Execute o comando Enter-PSSession para iniciar uma sessão remota na máquina em 192.168.8.107 como usuário ma.

Enter-PSSession -ComputerName 192.168.8.107 -Credential ma

Digite a senha da conta de usuário remota, ma, quando solicitado conforme mostrado abaixo.

Entering an interactive remote session

Você verá um novo prompt, conforme mostrado abaixo. O endereço IP dentro dos colchetes indica o host do PowerShell remoto.

Viewing a remote prompt

3. Liste os arquivos no diretório de trabalho atual com o comando dir, conforme mostrado abaixo. Você pode executar quantos comandos do PowerShell desejar dentro de uma sessão dir.

dir

Os conteúdos do diretório devem estar na sua tela, como na captura de tela abaixo.

Linting the files on a remote machine

4. Execute o cmdlet Exit-PSSession abaixo para sair da sessão assim que terminar de gerenciar a máquina remota.

Exit-PSSession

Após sair, você deve retornar a um prompt local, como na captura de tela abaixo.

Exiting a remote session

Desconectar e Reconectar Sessões do PowerShell Remoto

É possível armazenar uma sessão de forma persistente como uma alternativa às sessões interativas ou comandos únicos. Armazenar uma sessão permite alternar entre sessões sem perder o contexto. Nesta seção, você aprenderá a criar e gerenciar sessões persistentes.

1. Execute o cmdlet New-PSSession para criar uma sessão no computador remoto, 192.168.8.107, como usuário ma (-Credential). Salve a sessão na variável $var, conforme abaixo.

$var = New-PSSession -ComputerName 192.168.8.107 -Credential ma

2. Execute a variável $var para visualizar seu conteúdo conforme abaixo

$var

Como mostrado abaixo, você deverá ver um objeto de sessão com um RemoteMachine ComputerType e Estado definidos como Abertos.

Displaying the details of a session

3. Execute o comando Enter-PSSession para entrar na sessão armazenada em $var.

Enter-PSSession $var

Se tudo estiver correto, o prompt mudará para um prompt remoto sem mais saída, como mostrado abaixo.

Entering a persistent remote session

4. Crie uma variável, $rem1, dentro da sessão. Use qualquer nome de variável e string de identificação que desejar. Você usará essa variável mais tarde para determinar se conectou à mesma sessão.

$rem1 = "same session"

5. Execute o comando abaixo para sair da sessão do PowerShell remoto.

Exit-PSSession
Disconnecting from a persistent remote session

6. Restabeleça uma sessão do PowerShell remoto.

Enter-PSSession $var

7. Execute a variável $rem1 no prompt da sessão remota, conforme mostrado abaixo, para visualizar seu valor.

$rem1

Você deve visualizar o mesmo valor que definiu anteriormente antes de sair da sessão remota do PowerShell, confirmando que você reconectou à mesma sessão.

Viewing the value of a session variable

8. Execute o comando Exit-PSSession para sair da sessão mais uma vez, como mostrado a seguir.

Exit-PSSession

9. Finalmente, execute Invoke-Command com a opção session configurada como $var para exibir o nome do host da máquina remota na mesma sessão remota. Este método é uma maneira alternativa de executar comandos na mesma sessão sem se conectar, desconectar e reconectar manualmente a uma única sessão.

Invoke-Command -Session $var -ScriptBlock {hostname}
Displaying the hostname of a remote machine

10. Execute o comando Remove-PSSession para remover completamente a sessão armazenada em $var.

Remove-PSSession $var

Conclusão

Parabéns! Ao chegar ao final deste tutorial, você aprendeu como gerenciar um sistema Windows ou Linux com o PowerShell remoto. Este guia teve como objetivo te dar uma introdução. Que tal se aprofundar ainda mais com PowerShell no Linux através de uma sessão remota?

Source:
https://adamtheautomator.com/remote-powershell/