Búsqueda de sitios web

¿Cómo sombrear (control remoto) la sesión RDP de un usuario en RDS Windows Server 2016/2019?


El modo de sesión oculta permite a los administradores de RDS ver e interactuar con el escritorio del usuario. El modo de sombra de escritorio remoto funciona en todas las versiones modernas de Windows a partir de Windows Server 2012 R2 y Windows 8.1 (excepto Windows Server 2012, debido a la transferencia de la pila RDP del kernel al modo de usuario). En este artículo, veremos cómo configurar y usar RDS Shadowing para conectar y administrar sesiones activas de usuarios de RDP en Windows Server 2016 y Windows 10.

Opciones de Shadow Connection en el cliente RDP de Windows (mstsc.exe)

En Windows Server 2016/Windows 10, el cliente RDP integrado (

mstsc.exe

) tiene varias opciones especiales que se pueden usar para conectarse de forma remota a una sesión RDP activa de cualquier usuario:

Mstsc.exe [/shadow:sessionID [/v:Servername] [/control] [/noConsentPrompt] [/prompt]]

/shadow:ID

- conectarse a la sesión RDP del usuario con la ID especificada;

/v:servername

- puede especificar el nombre de host o la dirección IP del host RDP/RDS remoto. Si no se establece, las conexiones se realizan a sesiones de usuarios locales en el host actual;

/control

- permite interactuar con la sesión del usuario (escritorio). El administrador puede controlar el mouse del usuario, ingresar datos desde el teclado. Si no se establece este parámetro, se utiliza el modo de vista de sesión del usuario;

/noConsentPrompt

- la opción permite al administrador forzar la conexión a cualquier sesión sin pedirle al usuario que confirme la conexión;

/prompt

- permite conectarse con otras credenciales. Se solicita el nombre de usuario y la contraseña para conectarse a la computadora remota.

Las sesiones instantáneas se pueden usar para conectarse a sesiones de usuario en computadoras y servidores tanto en un dominio de Active Directory como en un grupo de trabajo. Además, no es necesario tener privilegios de administrador en el host RDS en el que se está ejecutando la sesión RDP del usuario. Los administradores pueden delegar permisos de remedo de RDS a cualquier cuenta de usuario, incluso para los que no son administradores (más sobre esto a continuación).

Uso de Remote Desktop Shadow desde la GUI de Windows

Puede conectarse a una sesión de usuario usando

mstsc.exe

o directamente desde la consola gráfica de Server Manager. Para hacerlo, abra la consola del Administrador del servidor en el servidor RDS, vaya a la sección Servicios de escritorio remoto -> seleccione su colección, por ejemplo

QuickSessionCollection

La lista de la derecha contendrá una lista de usuarios que tienen sesiones en este servidor RDS. Haga clic derecho en la sesión de usuario que desee, seleccione Shadow en el menú desplegable.

Solo puede conectarse a una sesión de usuario activa. Si la sesión está desconectada (debido a la configuración de límite/tiempo de espera de la sesión de RDS), no puede conectarse a dicha sesión:

Shadow Error - The specified session is not connected.

Aparecerá una ventana con los parámetros de conexión de Shadow. Puede Ver o Controlar la sesión RDP de un usuario. También puede marcar la opción Solicitar el consentimiento del usuario.

Si esta opción está marcada, la siguiente solicitud aparece en la sesión RDP del usuario:

Remote Monitoring Request
a-d\administrator is requesting to view your session remotely. Do you accept the request?

Si el usuario confirma la conexión, el administrador verá su escritorio en modo Ver, pero no podrá interactuar con él.

Consejo. Para desconectarse de una sesión de usuario y salir del modo Sombra, presione

ALT+*

en la estación de trabajo o

Ctrl+*

en el servidor RDS (si no se establecen combinaciones alternativas).

Si un usuario rechaza la conexión administrativa de Shadow RDS, aparece el siguiente mensaje:

Shadow Error: The operator or administrator has refused the request.

No puede usar el complemento gráfico tsadmin.msc de Windows Server 2008 R2 para conexiones instantáneas a sesiones RDP en versiones más recientes de Windows Server.

Si intenta conectarse a la sesión de un usuario sin solicitar confirmación, recibirá un mensaje de error:

Shadow Error: The Group Policy setting is configured to require the user’s consent. Verify the configuration of the policy settings.

Si necesita auditar eventos de conexión instantánea de RDS para sesiones de usuario, use los siguientes eventos filtrados del registro Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational:

  • Id. de evento 20508: Permiso de Shadow View concedido;

  • Id. de evento 20503: sesión de Shadow View iniciada;

  • Id. de evento 20504: Sesión de Shadow View detenida.

Configuración de reglas de sombra de RDS en Windows mediante GPO

La configuración de las conexiones remotas a las sesiones de usuario de RDS se configura mediante el parámetro de directiva de grupo Establecer reglas para el control remoto de las sesiones de usuario de Servicios de Escritorio remoto, que se encuentra en las secciones Usuario y Equipo del GPO: Políticas -> Plantillas administrativas -> Componentes de Windows -> Servicios de Escritorio remoto -> Host de sesión remota -> Conexiones. Esta política corresponde al parámetro DWORD Shadow bajo la clave de registro

HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services

(los valores de este parámetro correspondientes a la configuración de la política se especifican entre paréntesis).

Esta política se puede utilizar para configurar las siguientes opciones de conexión de RD Shadow:

  • No se permite control remoto (corresponde al valor del parámetro de registro

    Shadow = 0

    );

  • Control total con permiso del usuario (

    1

    );

  • Control total sin permiso del usuario (

    2

    );

  • Ver sesión con permiso del usuario (

    3

    );

  • Ver sesión sin el permiso del usuario (

    4

    ).

Para establecer el parámetro de esta política directamente a través del registro, puede usar el comando:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 4

Después de cambiar el comportamiento de la sombra de la sesión, actualice la configuración de la directiva de grupo en el host RDP/RDS.

Puede configurar reglas para conexiones instantáneas remotas en el dominio AD desde el

gpmc.msc

consola usando el parámetro de política descrito anteriormente, o usando Preferencias de política de grupo, que modifican directamente el parámetro de registro (la última opción le permite orientar con mayor precisión la política a equipos específicos mediante la orientación a nivel de elemento de política de grupo).

Seguimiento de sesión RDP con PowerShell

También puede usar las funciones de Sombra de Servicios de Escritorio remoto para conectarse a la sesión de un usuario desde PowerShell. En primer lugar, debe obtener una lista de sesiones en el host RDS (las sesiones de usuario se agruparán según su estado):

Get-RDUserSession | ft Username, UnifiedSessionId, SessionState, HostServer, ApplicationType -GroupBy Sessionstate

Hay tres sesiones de usuario RDP activas en este servidor. Conectémonos a la sesión de usuario con el ID de sesión 3:

Mstsc /shadow:3 /control

Además, para obtener una lista de todas las sesiones RDP en el servidor (o en el escritorio de Windows 10 al que se permiten múltiples conexiones RDP), puede usar el comando:

quser

o

qwinsta

La pantalla mostrará una lista de sesiones de usuario de RDP, sus ID y estados:

Active

o

Disconnected

Para mostrar la lista de sesiones en un servidor remoto, ejecute el siguiente comando:

query session /server:servername

Para conectarse a una sesión de usuario en un servidor remoto, use el comando:

mstsc /v:rdsh2:3389 /shadow:3 /control

El intervalo de puertos dinámicos (RPC) 49152 a 65535 se utiliza para establecer una sesión de conexión instantánea remota en lugar del puerto TCP/3389 RDP predeterminado.

Para una conexión de sombra más conveniente a las sesiones de usuario de RDP, puede usar el siguiente script por lotes. Le solicita que ingrese el nombre del servidor RDS remoto, muestra una lista de todas las sesiones y le solicita que especifique la sesión (ID) a la que desea conectarse:

sombra.murciélago

@echo off
set /P rcomp="Enter name or IP of a Remote PC: "
query session /server:%rcomp%
set /P rid="Enter RDP user ID: "
start mstsc /shadow:%rid% /v:%rcomp% /control

Puede guardar este archivo bat en el

%Windir%\System32

directorio. Como resultado, solo necesita ejecutar el comando sombra para iniciar la conexión de sombra.

Para conectarse a la sesión de la consola, puede usar este script:
shadow_console.bat

@echo off
set /P rcomp="Enter name or IP of a Remote PC: "
for /f "tokens=3 delims= " %%G in ('query session console /server:%rcomp%') do set rid=%%G
start mstsc /shadow:%rid% /v:%rcomp% /control

También puede usar el siguiente script de PowerShell con una GUI simple (shadow_user_rdp_session.ps1) para la conexión de sombra:

Add-Type -assembly System.Windows.Forms
$Header = "SESSIONNAME", "USERNAME", "ID", "STATUS"
$gForm = New-Object System.Windows.Forms.Form
$gForm.Text ='Shadow Session Connect'
$gForm.Width = 400
$gForm.AutoSize = $true
$dBttn = New-Object System.Windows.Forms.Button
$dBttn.Text = 'Control'
$dBttn.Location = New-Object System.Drawing.Point(15,10)
$gForm.Controls.Add($dBttn)
$dList = New-Object System.Windows.Forms.ListView
$dList.Location = New-Object System.Drawing.Point(0,50)
$dList.Width = $gForm.ClientRectangle.Width
$dList.Height = $gForm.ClientRectangle.Height
$dList.Anchor = "Top, Left, Right, Bottom"
$dList.MultiSelect = $False
$dList.View = 'Details'
$dList.FullRowSelect = 1;
$dList.GridLines = 1
$dList.Scrollable = 1
$gForm.Controls.add($dList)
foreach ($column in $Header){
$dList.Columns.Add($column) | Out-Null
}
$(qwinsta.exe | findstr "Active") -replace "^[\s>]" , "" -replace "\s+" , "," | ConvertFrom-Csv -Header $Header | ForEach-Object {
$dListItem = New-Object System.Windows.Forms.ListViewItem($_.SESSIONNAME)
$dListItem.Subitems.Add($_.USERNAME) | Out-Null
$dListItem.Subitems.Add($_.ID) | Out-Null
$dListItem.Subitems.Add($_.STATUS) | Out-Null
$dList.Items.Add($dListItem) | Out-Null
}
$dBttn.Add_Click(
{
$SelectedItem = $dList.SelectedItems[0]
if ($SelectedItem -eq $null){
[System.Windows.Forms.MessageBox]::Show("Select a user session to connect ")
}else{
$session_id = $SelectedItem.subitems[2].text
$(mstsc /shadow:$session_id /control)
#[System.Windows.Forms.MessageBox]::Show($session_id)
}
}
)
$gForm.ShowDialog()

Este script muestra un formulario gráfico simple con una lista de sesiones RDP activas en el host local. Solo necesita seleccionar una cuenta de usuario y hacer clic en el botón Conectar.

Para ejecutar scripts de PowerShell (*.ps1) en la computadora, debe configurar la política de ejecución de PowerShell.

Puede usar la conexión de usuario oculto no solo en Windows Server con el rol de Servicios de escritorio remoto, sino también para conectarse a los escritorios de los usuarios que ejecutan Windows 10 (Uso del modo de sombra de sesión de escritorio remoto en Windows 10).

¿Cómo permitir que los usuarios que no son administradores remeden las sesiones de RDS?

En los ejemplos anteriores, el uso de la conexión instantánea a las sesiones de usuario de RDS requiere privilegios de administrador local en el servidor RDS. Sin embargo, puede permitir que un usuario que no sea administrador remede sesiones RDP sin otorgar permisos de administrador local en la computadora/servidor.

Por ejemplo, desea permitir que los miembros del grupo AllowRDSShadow usen una conexión instantánea para las sesiones de usuario de RDP. Abra el símbolo del sistema elevado (cmd.exe) y ejecute el comando:

wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=”RDP-Tcp”) CALL AddAccount “a-d\AllowRDSShadow”,2

Artículos relacionados