Configurar PowerShell Remoting (WinRM) para equipos sin dominio (grupo de trabajo)

PowerShell Remoting es una excelente herramienta que le permite conectarse y ejecutar comandos en computadoras remotas a través de WinRM. Si las computadoras están unidas al dominio de Active Directory, PSRemoting usa Kerberos para autenticarse en hosts remotos. Sin embargo, si sus computadoras están en un grupo de trabajo, deberá usar certificados NTLM (TrustedHosts) o SSL para la autenticación. Veamos cómo configurar y usar PSRemoting (WinRM) en un entorno de grupo de trabajo (sin dominio).

En este ejemplo, hay dos hosts en un grupo de trabajo de Windows:

  • Estación de trabajo del administrador: 192.168.13.100
  • computadora del usuario — 192.168.13.222

Nuestra tarea es conectarnos a la computadora del usuario de forma remota a través de PowerShell Remoting.

El primer paso es habilitar y configurar WinRM en el host remoto. Deberá habilitar WinRM de forma local o remota (por ejemplo, mediante RDP o psexec).

Asegúrese de que el servicio WinRM se esté ejecutando en la computadora del usuario de destino:

Get-Service -Name "*WinRM*" | select status

Si el servicio no se está ejecutando, habilítelo:

Enable-PSRemoting

WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.
WinRM has been updated for remote management.
WinRM firewall exception enabled.
Configured LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.

habilite psremoting (winrm) en una computadora de grupo de trabajo

Si el Público tipo de conexión de red está configurado en una computadora, verá el siguiente error al habilitar WinRM:

Set-WSManQuickConfig : ... WinRM firewall exception will not work since one of the network connection types on this machine is set to Public. Change the network connection type to either Domain or Private and try again.

Cambiar el tipo de red a Privado (Set-NetConnectionProfile -NetworkCategory Private) o ejecute el siguiente comando:

Enable-PSRemoting –SkipNetworkProfileCheck

Abra el puerto TCP/5985 en el Firewall de Windows Defender para conectarse a WinRM. La forma más fácil es abrir un puerto de Firewall de Windows usando PowerShell. En este ejemplo, abriremos el acceso remoto solo para la dirección IP de la computadora del administrador (más seguro), pero puede abrirlo para todos (especifique Cualquiera en lugar de una dirección IP):

Set-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)" -RemoteAddress 192.168.13.100
Enable-NetFirewallRule -DisplayName "Windows Remote Management (HTTP-In)"

En la computadora del administrador, asegúrese de que la computadora del usuario ahora acepta conexiones remotas a través de PSRemoting:

Test-NetConnection 192.168.13.222 –Port 5985
Test-WsMan 192.168.13.222

Test-WsMan: pruebe la conectividad de WinRM a través de PowerShell

Sin embargo, si intenta conectarse a la computadora de un usuario de forma remota mediante los cmdlets Invoke-Command o Enter-PSSession, aparece el siguiente error:

Enter-PSSession 192.168.13.222

Enter-PSSession : Connecting to remote server 192.168.13.222 failed with the following error message: The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the TrustedHosts list might not be authenticated. PSRemotingTransportException.

WinRM HTTP Listener en la computadora remota solo permite la conexión con la autenticación Kerberos.

Get-ChildItem -Path WSMan:localhostServiceAuth

Tipos de autenticación de WSMan: kerberos y negociación

Para usar la autenticación de Negociación con NTLM, su computadora debe confiar en la computadora remota. En un dominio, esto se logra usando Kerberos, mientras que en un entorno de grupo de trabajo, deberá agregar las direcciones IP de la computadora a TrustedHosts.

Agregue una computadora de usuario a TrustedHosts en la computadora del administrador (puede hacerlo usando su dirección IP o FQDN):

Set-Item wsman:localhostclientTrustedHosts -Value 192.168.13.222 -Force

Lista de equipos en TrustedHosts:

get-Item WSMan:localhostClientTrustedHosts

Para borrar la lista de TrustedHosts:

Set-Item WSMan:localhostClientTrustedHosts -Value "" –Force

Para agregar una nueva computadora a la lista TrustedHosts, use la opción -Concatenar:

Set-Item WSMan:localhostClientTrustedHosts -Value 192.168.13.200 -Concatenate

También puede permitir la conexión remota a todas las computadoras (por lo general, no se recomienda ya que una de las principales desventajas de la autenticación NTLM es vulnerable a varios ataques maliciosos).

Set-Item wsman:localhostClientTrustedHosts -value *

Luego intente conectarse a la computadora remota a través de PSRemoting:

Enter-PSSession -ComputerName 192.168.13.222 -Credential 192.168.13.222root

Ingrese la contraseña de administrador de la computadora remota y asegúrese de que la conexión se haya establecido correctamente (el nombre de host o la dirección IP de la computadora remota se muestra en el indicador de PowerShell).

enter-pssession en una computadora de grupo de trabajo

Ahora puede ejecutar comandos y scripts en equipos de grupos de trabajo remotos utilizando Invoke-Command. Por ejemplo, reinicie una computadora de forma remota:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222root –ScriptBlock {Restart-Computer}

O ejecute un script de PowerShell:

Invoke-Command -ComputerName 192.168.13.222 -Credential 192.168.13.222root -FilePath c:ScriptsGetComputerInfo.ps1

En WinRM, también puede usar HTTPS para conectarse a computadoras remotas. Para hacerlo, debe emitir un certificado SSL en una computadora remota e importarlo a la computadora del administrador. En este caso, no necesita agregar la dirección IP de la computadora remota a la lista TrustedHosts. Obtenga más información sobre cómo configurar PowerShell Remoting (WinRM) a través de HTTPS.

Tenga en cuenta que para autenticarse en una computadora remota, debe ingresar una contraseña de usuario usando el -Credencial opción. Si tiene muchas computadoras en su red con diferentes contraseñas de administrador local, es conveniente almacenar las contraseñas de conexión en una bóveda. Puede ser una bóveda de contraseñas de Windows Credential Manager o una tienda externa, como KeePass, LastPass, HashiCorp Vault, Azure Key Vault o Bitwarden.

Puede usar el módulo de administración de secretos de PowerShell para acceder a las contraseñas guardadas en dicha bóveda. Ahora, para conectarse a una computadora remota a través de PSRemoting, es suficiente con:

  1. Guarde una contraseña de conexión, por ejemplo, en Credential Manager: cmdkey /add:192.168.13.222 /user:root /pass:Password1
  2. Obtenga el nombre y la contraseña de la bóveda usando el módulo CredentialManager: $psCred = Get-StoredCredential -Target "192.168.13.222"
  3. Conéctese a la computadora remota usando PSRemoting y la contraseña guardada: Enter-PSSession -ComputerName 192.168.13.222 -Credential $psCred

Si almacena contraseñas en otro tipo de bóveda, use el módulo Microsoft.PowerShell.SecretManagement para obtener las credenciales guardadas.

En las nuevas versiones de PowerShell (v6 o v7), puede usar el protocolo Secure Shell (SSH) para conectarse a una computadora remota a través de PowerShell Remoting. Para hacer esto, el servidor SSH incorporado debe estar habilitado en Windows. Incluso puede autenticarse en Windows usando una clave SSH:

Enter-PSSession -HostName [email protected]:22 -KeyFilePath c:PSyour_rsa_key

Artículos Interesantes