Cómo solucionar el problema de doble salto de PowerShell: Una guía completa

¿Alguna vez has intentado acceder a un recurso remoto dentro de una sesión de PowerShell Remoting solo para encontrarte con un frustrante bloqueo de acceso denegado? Este problema común, conocido como el problema del “doble salto”, te impide acceder a una segunda máquina remota desde tu sesión actual.

¿La buena noticia? Hay formas de resolver el problema del doble salto sin configuraciones demasiado complejas. En este tutorial, crearás una sesión personalizada que maneja la autenticación sin problemas, ahorrándote tiempo y esfuerzo mientras mantienes la seguridad.

¡Supera los dobles saltos con configuraciones de sesión y agiliza tu flujo de trabajo!

Ejecutando PowerShell como un Usuario Diferente

Si estás trabajando con scripts que se conectan a recursos remotos, podrías encontrarte con el problema del doble salto. Este problema ocurre cuando tus credenciales no logran autenticar más allá del primer salto en una conexión remota.

Por ejemplo, considera un script que cuenta subdirectorios en una computadora remota utilizando una ruta UNC:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Si has iniciado sesión con un usuario que no tiene permiso para acceder a un recurso, puedes ejecutar PowerShell bajo una cuenta de usuario diferente:

  1. Busca PowerShell en el menú de inicio.
  2. Haz clic derecho en el acceso directo de PowerShell y selecciona Abrir ubicación del archivo.
  3. En el Explorador de archivos, mantén presionada la tecla Shift, haz clic derecho en el acceso directo y selecciona Ejecutar como usuario diferente.
  4. Ingresa las credenciales de un usuario con los permisos necesarios.

Después de iniciar PowerShell como un usuario diferente, el comando debería tener éxito ahora:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Consejo: Si ejecutas comandos con frecuencia con diferentes credenciales, considera utilizar el cmdlet Start-Process con el parámetro -Credential. Este enfoque te permite abrir nuevas sesiones de PowerShell directamente desde la consola con credenciales alternativas.


Pruebas de Conexiones Remotas

Es posible que puedas acceder con éxito a un recurso remoto de manera local, como una carpeta compartida, al trabajar con varios sistemas remotos. Pero luego descubres que el mismo comando produce un error de “acceso denegado” al ejecutarlo (desde un segundo equipo remoto).

Esta inconsistencia puede resultar confusa, especialmente cuando estás seguro de que tus credenciales tienen permisos suficientes.

Para probar tus conexiones remotas, establece una sesión con otro equipo:

Enter-PSSession -ComputerName SRV3

Una vez conectado, intenta ejecutar el mismo comando en el segundo equipo:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Esta prueba a menudo arroja un error de “acceso denegado”, incluso si utilizas una cuenta con permisos.

Confirma tu usuario actual con lo siguiente:

whoami

Este comportamiento (doble salto) ocurre porque PowerShell no transmite tus credenciales al siguiente salto. Este mecanismo es una característica de seguridad incorporada en la autenticación Kerberos, pero puede ser un dolor de cabeza importante al gestionar múltiples sistemas.

Resolviendo el Problema del Doble Salto con Configuraciones de Sesión

Una solución al problema del doble salto es crear una configuración de sesión en el equipo intermedio.

Empieza registrando una configuración de sesión en el equipo al que te estás conectando, en este caso, SRV3.

El siguiente comando:

  • Asigna un Nombre a la configuración de la sesión (por ejemplo, Admin).
  • Especifica la cuenta (RunAsCredential) bajo la cual se ejecutarán las sesiones.
  • Asegura (Force) que la configuración se aplique y reinicia el servicio WinRM.
Invoke-Command -ComputerName SRV3 -ScriptBlock {
    Register-PSSessionConfiguration -Name Admin -RunAsCredential 'psforsysadmins.local\adam' -Force
}

PowerShell te solicita la contraseña para la cuenta RunAsCredential, que se almacena de forma segura en la máquina remota. Una vez que la configuración está registrada, el servicio WinRM se reinicia y la sesión se cierra.

Con la configuración en su lugar, ahora puedes conectarte usando el parámetro ConfigurationName:

Invoke-Command -ComputerName SRV3 -ScriptBlock {
    (Get-ChildItem -Path \\SRV2\c$ -Directory).Count
} -ConfigurationName Admin

Este comando realiza la misma operación que antes. Sin embargo, especifica la configuración de sesión Admin, que se ejecuta bajo la cuenta de administrador especificada.


Consejo: Limita el acceso a la configuración de la sesión definiendo permisos de acceso específicos para usuarios o grupos utilizando el cmdlet Set-PSSessionConfiguration. Hacerlo asegura que solo los usuarios autorizados puedan aprovechar la configuración.


Conclusión

En esta guía, has visto y resuelto el problema del doble salto en PowerShell Remoting. Configurar una sesión puede resolver el problema del doble salto y asegurar que las credenciales se transmitan de forma segura.

Esta solución es persistente, por lo que puedes reutilizar la configuración incluso después de reinicios, lo que la convierte en un enfoque robusto para gestionar sesiones remotas de PowerShell. Ahora puedes gestionar operaciones remotas de múltiples saltos con confianza y optimizar flujos de trabajo sin comprometer la seguridad.

A partir de aquí, considere explorar opciones de seguridad avanzadas, como restringir el acceso a sesiones o implementar autenticación basada en certificados. Estas mejoras pueden fortalecer aún más su configuración de acceso remoto mientras se gestionan entornos complejos de forma flexible.

Source:
https://adamtheautomator.com/powershell-double-hop-fix/