Um Guia Detalhado para Iniciar 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 PowerShell Remoting você pode. Com o PowerShell remoto, você pode executar comandos e scripts em vários sistemas remotos de maneira sustentável.

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

Pré-requisitos

Este tutorial será uma demonstração prática. Se você quiser 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 usará 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.
  • Máquina Linux com SSHD habilitado para servir como um ponto de extremidade remoto do PowerShell através do 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 usa 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 o remoting do PowerShell, e você pode tê-lo habilitado então. Mas, 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

Habilitando 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. Esta 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. Finalmente, reinicie o servidor SSH executando o seguinte comando.

sudo systemctl restart sshd

Adicionando Hosts Confiáveis do PowerShell Remoto na Máquina Local

Neste ponto, seu computador remoto está pronto para receber comandos. Mas, seu computador de gerenciamento pode recusar a conexão aos hosts do PowerShell remoto se eles não estiverem na lista de Hosts Confiáveis. Para evitar possíveis problemas de conexão remota, 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 as 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ê irá 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 primeiros cinco serviços na máquina remota como usuário ma. O comando a ser executado aparece entre as chaves do switch ScriptBlock, conforme 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 realizar o mesmo em um host Linux remoto, execute o comando abaixo em vez disso. Note 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ê irá 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 posteriormente.

# 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, para 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

Informe a senha da conta de usuário remota, ma, no prompt, conforme mostrado abaixo.

Entering an interactive remote session

Você verá um novo prompt, como mostrado abaixo. O endereço IP entre 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 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

Ao sair, você deve retornar a um prompt local, conforme mostrado na captura de tela abaixo.

Exiting a remote session

Desconectar e Reconectar Sessões Remote PowerShell

É possível armazenar uma sessão de forma persistente como uma alternativa a 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, da seguinte forma.

$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 State definidos como Opened.

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á esta variável mais tarde para determinar se conectou à mesma sessão.

$rem1 = "same session"

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

Exit-PSSession
Disconnecting from a persistent remote session

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

Enter-PSSession $var

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

$rem1

Deve ver o mesmo valor que definiu anteriormente antes de sair da sessão remota do PowerShell, confirmando que se reconectou à mesma sessão.

Viewing the value of a session variable

8. Execute o comando Exit-PSSession para sair da sessão novamente conforme a seguir.

Exit-PSSession

9. Por fim, execute Invoke-Command com o interruptor session definido como $var para mostrar 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 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 Remove-PSSession para remover a sessão armazenada em $var completamente.

Remove-PSSession $var

Conclusão

Parabéns! Ao chegar ao final deste tutorial, aprendeu a gerir um sistema Windows ou Linux com o PowerShell remoto. Este guia teve como objetivo molhar os pés. Por que não mergulhar mais fundo com PowerShell no Linux durante uma sessão remota?

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