Examinar o recurso de comunicação remota do Windows PowerShell
A comunicação remota usa um protocolo de padrão aberto chamado WS-Management ou WS-MAN (Web Services for Management). Como o nome indica, esse protocolo é criado no mesmo protocolo HTTP ou HTTPS, que os navegadores da Web usam para se comunicar com servidores Web. Isso torna o protocolo mais fácil de gerenciar e encaminhar por meio de firewalls. Os sistemas operacionais Windows implementam o protocolo, usando o serviço WinRM (Gerenciamento Remoto do Windows). O PowerShell permite a comunicação remota da WMI, do WS-Management e do SSH (Secure Shell). No PowerShell 6, não há suporte para comunicação baseada em RPC (Chamadas de Procedimento Remoto). No PowerShell 7 e versões mais recentes, há suporte para RPC somente no Windows.
Você deve habilitar a comunicação remota nos computadores em que deseja receber conexões de entrada, embora nenhuma configuração seja necessária nos computadores que estão iniciando as conexões de saída. A comunicação remota do PowerShell é habilitada por padrão para conexões de entrada em todas as versões com suporte atualmente no Windows Server. Você também pode habilitá-la em qualquer computador que esteja executando o Windows PowerShell 3.0 ou mais recente.
Observação
Embora a comunicação remota seja habilitada por padrão nos sistemas operacionais Windows Server, ela não está habilitada por padrão nos sistemas operacionais cliente, incluindo o Windows 10 e o Windows 11.
A comunicação remota do Windows PowerShell usa o WinRM, que pode gerenciar comunicações para outros aplicativos. Por exemplo, em uma instalação do Windows Server 2016 padrão ou mais recente, o WinRM gerencia as comunicações para componentes do Windows PowerShell de 64 bits, do Windows PowerShell de 32 bits e dois componentes do Gerenciador do Servidor.
Arquitetura da comunicação remota
A comunicação remota começa com o serviço WinRM. Ela registra um ou mais ouvintes, e cada ouvinte aceita o tráfego de entrada por meio de HTTP ou HTTPS. Cada ouvinte pode ser associado a um único endereço IP local ou a vários endereços IP. Não há dependência no IIS (Serviços de Informações da Internet da Microsoft), o que significa que o IIS não precisa ser instalado para que o WinRM funcione.
O tráfego de entrada inclui um cabeçalho de pacote, que indica o destino ou ponto de extremidade pretendido do tráfego. No Windows PowerShell, esses pontos de extremidade também são conhecidos como configurações de sessão. Cada ponto de extremidade está associado a um aplicativo específico. Quando o tráfego é direcionado para um ponto de extremidade, o WinRM inicia o aplicativo associado, libera o tráfego de entrada e aguarda o aplicativo concluir a tarefa. O aplicativo pode passar os dados para o WinRM e o WinRM transmite os dados para o computador de origem.
Em um cenário do Windows PowerShell, você envia os comandos para o WinRM, que executa os comandos. O processo é listado como Wsmprovhost na lista de processos do computador remoto. O Windows PowerShell executa esses comandos e converte os objetos resultantes (se houver) em XML. O fluxo de texto XML é devolvido ao WinRM, que o transmite para o computador de origem. O Windows PowerShell no computador remoto converte o XML em objetos estáticos. Isso permite que os resultados do comando se comportem como qualquer outro objeto no pipeline do Windows PowerShell.
O Windows PowerShell pode registrar vários pontos de extremidade ou configurações de sessão com o WinRM. Na verdade, um sistema operacional de 64 bits registrará um ponto de extremidade para o host do Windows PowerShell de 64 bits e o host de 32 bits, por padrão. Você também pode criar seus próprios pontos de extremidade personalizados com permissões e recursos altamente precisos atribuídos.
Comunicação remota do Windows PowerShell sem configuração
Muitos cmdlets do Windows PowerShell têm o parâmetro ComputerName que permite coletar dados e alterar as configurações de um ou mais computadores remotos. Esses cmdlets usam protocolos de comunicação variados e funcionam em todos os sistemas operacionais Windows sem qualquer configuração especial.
Esses cmdlets incluem:
- Restart-Computer
- Test-Connection
- Clear-EventLog
- Get-EventLog
- Get-HotFix
- Get-Process
- Get-Service
- Set-Service
- Get-WinEvent
- Get-WmiObject
Normalmente, os cmdlets que permitem comunicação remota sem configuração especial têm um parâmetro ComputerName, e não um parâmetro Session.
Para localizar esses cmdlets em sua sessão, insira:
Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Comunicação remota do PowerShell por SSH
Normalmente, a comunicação remota do PowerShell usa WinRM para negociação de conexão e transporte de dados. Agora, o SSH está disponível para plataformas Linux e Windows, e permite a verdadeira comunicação remota multiplataforma do PowerShell.
O WinRM fornece um modelo de hospedagem robusto para sessões remotas do PowerShell. No momento, a comunicação remota baseada em SSH não é compatível com a configuração de ponto de extremidade remoto e JEA (Just Enough Administration).
A comunicação remota do SSH oferece a comunicação remota de sessão básica do PowerShell entre computadores Windows e Linux. A comunicação remota do SSH cria um processo de hospedagem do PowerShell no computador de destino como um subsistema de SSH. Eventualmente, a Microsoft planeja implementar um modelo de hospedagem geral, semelhante ao WinRM, para permitir a configuração de ponto de extremidade e JEA.
Observação
Agora, os cmdlets New-PSSession, Enter-PSSession e Invoke-Command têm um novo parâmetro definido para permitir essa nova conexão de comunicação remota.
Para usar a comunicação remota do PowerShell por SSH, você deve instalar o PowerShell 6 ou mais recente e o SSH em todos os computadores. Em seguida, você deve instalar os executáveis do cliente SSH (ssh.exe) e do servidor (sshd.exe) para que você possa executar a comunicação remota nos computadores. O OpenSSH para Windows está disponível a partir do Windows 10 build 1809 e Windows Server 2019. Para Linux, instale a versão do SSH (incluindo o servidor sshd.exe) apropriada para a plataforma. Você também precisa instalar a versão atual do PowerShell no GitHub, para garantir que o recurso de comunicação remota SSH esteja disponível. Você deve configurar o servidor SSH para criar um subsistema de SSH, para hospedar um processo do PowerShell no computador remoto. Você também precisa habilitar a autenticação baseada em senha ou chave.