PowerShell Remoto

Hoje resolvi me dedicar a testar uma funcionalidade que vai me ajudar muito (espero): estabelecer uma sessão PowerShell em um computador remoto.

PowerShell
Qual o problema?

Bem, estabelecer uma sessão Powershell é simples (desde que no computador destino o serviço WinRM esteja iniciado e devidamente configurado):

Enter-PSSession -ComputerName W001

 
O problema é que o meu computador móvel não faz parte de domínio nenhum, e ao prestar suporte, preciso conectar a servidores de vários clientes diferentes. Como resolver esta questão?

Fiz o download de um e-book gratuito no site http://powershellbooks.com, chamado “Secrets of PowerShell Remoting”, e segui os passos delineados ali. Vou reproduzir os comandos necessários. O meu ambiente é o seguinte:

  • Laptop com Windows 8 Pro (PowerShell 3.0)
  • Servidor Windows Server 2008 R2 (PowerShell 2.0)

Vamos lá:

Fase 1 – Servidor

Aqui precisamos iniciar e configurar o serviço WinRM (Windows Remote Management). Podemos fazer isso executando o comando abaixo no Shell do Windows (cmd.exe):

winrm quickconfig

 
O próximo passo é habilitar o PowerShell remoto. Abrindo uma sessão local de PowerShell, rodamos o comando abaixo (é importante lembrar que é necessário abrir o PowerShell com a opção “Run As Administrator”):

Enable-PSRemoting

 
Este comando inicia (se não estiver iniciado), configura o serviço WinRM para início automático, cria um listener HTTP que “ouve” em todos endereços IP e habilita uma exceção no Firewall do Windows. Por padrão, apenas os administradores poderão efetuar a conexão; isso pode ser confirmado com o comando abaixo:

Get-PSSessionConfiguration | FT Name,Permission

 
O passo seguinte é instalar um certificado para comunicação HTTPS. Isso é necessário porque não ocorre autenticação mútua quando o cliente e o servidor PowerShell não fazem parte do mesmo domínio Active Directory. Não vou detalhar como obter um certificado SSL aqui neste post; isso pode ser feito pelo snap-in Certificates no MMC, quando há uma autoridade certificadora interna, ou usando a dica no e-book (Digicert Certificate Utility).

Uma vez que o certificado esteja instalado no armazenamento de certificados pessoais do computador, precisamos extrair duas informações do certificado:

  • Subject (“Issued To”)
  • Thumbprint

De posse destas informações vamos configurar o listener (todo o comando em uma linha única):

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="xxx"; CertificateThumbprint="yyy"}

 
Neste commando, precisamos subsitituir estes valores:

  • * (asterisco) pelo endereço IP, caso desejemos que seja utilizado um IP especifico, ao invés de todos;
  • xxx: o subject do certificado. Normalmente é o FQDN do computador;
  • yyy: o thumbprint do certificado.

Um exemplo:

winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="W001.dominio.com"; CertificateThumbprint="4e24fbffd29ed04fa67baadb2502e0f6270fa236"}

 

Fase 2 – Cliente

Antes de iniciar, temos que nos certificar que podemos contatar o servidor usando o nome especificado no certificado. No meu ambiente fiz um “contorno” (nome elegante para uma coisa muito feia J): alterei o arquivo HOSTS; também funcionaria especificar o servidor DNS correto.

Agora podemos abrir uma sessão local de PowerShell e fazer a conexão com o servidor remoto:

$c = Get-Credential DOMINIO\Administrator
Enter-PSSession -ComputerName W001.dominio.com -Credential $c -UseSSL

 
Se tudo estiver correto, deverá aparecer um prompt indicando o nome do servidor remoto:

Se ocorrer um erro, informando que não é possível validar o certificado ou verificar se o mesmo foi revogado, isso significa que não é possível contatar a autoridade certificadora que emitiu o certificado. No meu ambiente, para simplificar, fiz uma alteração nas configurações da sessão PowerShell ANTES do estabelecimento da conexão, da seguinte forma:

$sopt = New-PSSessionOption -SkipCACheck -SkipCNCheck –SkipRevocationCheck
Enter-PSSession -ComputerName W001.dominio.com -Credential $c -UseSSL -SessionOption $sopt

 

Bem, espero que esta informação seja útil.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s