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

Modo de sesión de sombra permite a los administradores de RDS ver e interactuar con el escritorio del usuario. El modo de remedo de escritorio remoto funciona en todas las versiones modernas de Windows a partir de Windows Server 2012 R2 y Windows 8.1 (excepto para 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 el sombreado de RDS para conectar y administrar sesiones de usuario de RDP activas en Windows Server 2016 y Windows 10.

Opciones de conexión instantánea 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 utilizar para conectarse de forma remota a una sesión RDP activa de cualquier usuario:

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

mstsc.exe - opciones de conexión de sombra rdp en Windows 10

  • / shadow: ID – conectarse a la sesión RDP del usuario con el ID especificado;
  • / v: nombre del servidor – 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;
  • /inmediato – permite conectarse con otras credenciales. Se solicita el nombre de usuario y la contraseña para conectarse a la computadora remota.

Las sesiones de sombra 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 momento en que se está ejecutando la sesión RDP del usuario. Los administradores pueden delegar los permisos de RDS Shadowing 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 utilizando 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.

RDS 2012 R2 - QuickSessionCollection

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

Seguimiento de la sesión de usuario

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 RDS), no puede conectarse a dicha sesión:

Shadow Error - The specified session is not connected.

Error de sombra: la sesión especificada no está conectada.

Aparecerá una ventana con los parámetros de conexión de la sombra. Tu también puedes Vista o Control sesión RDP de un usuario. También puedes consultar Solicitar el consentimiento del usuario opción.

conexión en la sombra a la sesión de escritorio remoto del usuario en Windows Server 2016

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

Remote Monitoring Request
woshubadministrator is requesting to view your session remotely. Do you accept the request?

rds shadow Solicitud de monitoreo remoto en una sesión RDP de usuario

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

prueba de la conexión en la sombra a la sesión del usuario rdp

Propina. Para desconectarse de una sesión de usuario y salir del modo de 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 Shadow RDS, aparece el siguiente mensaje:

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

Error de sombra: el operador o administrador ha rechazado la solicitud

 

Si intenta conectarse a la sesión de un usuario sin pedir 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.

mstsc shadow noncosentpropmt: la configuración de directiva de grupo está configurada para requerir el consentimiento del usuario

Si necesita auditar eventos de conexión de sombra RDS para sesiones de usuario, utilice los siguientes eventos filtrados de la Microsoft-Windows-TerminalServices-RemoteConnectionManager / Operational Iniciar sesión:

  • 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.

auditar los eventos de la sesión de sombra en el visor de eventos del servidor de Windows

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 Computadora del GPO: Políticas -> Plantillas administrativas -> Componentes de Windows -> Servicios de escritorio remoto -> Host de sesión remota -> Conexiones. Esta política corresponde a la DWORD Sombra parámetro bajo la clave de registro HKLMSOFTWAREPoliciesMicrosoftWindows NTTerminal 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 RD Shadow:

  • No se permite el 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 permiso del usuario (4).

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

reg add "HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services" /v Shadow /t REG_DWORD /d 4

rdp shadow GPO: establezca reglas para el control remoto de las sesiones de usuario de Servicios de Escritorio remoto

Puede configurar reglas para conexiones de sombra remotas en el dominio de AD desde el gpmc.msc consola mediante el parámetro de política descrito anteriormente, o mediante el uso de Preferencias de política de grupo, que modifican directamente el parámetro de registro (la última opción le permite orientar la política con mayor precisión a equipos específicos mediante la orientación a nivel de elemento de política de grupo).

Sombreado 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
Get-RDUserSession

Hay tres sesiones de usuario de RDP activas en este servidor. Conéctese a la sesión del 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.

qwinsta: lista de sesiones remotas en RDS

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 rango de puerto dinámico (RPC) 49152 a 65535 se utiliza para establecer una sesión de conexión remota remota en lugar del puerto RDP TCP / 3389 predeterminado.

Para una conexión de sombra más conveniente a las sesiones de usuario de RDP, puede utilizar 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:

shadow.bat

@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 sombra comando para iniciar la conexión en la sombra.

Para conectarse a la sesión de la consola, puede utilizar 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 conexión en la 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 Conectar botón.

Puede usar la conexión de usuario de sombra 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 (usando el modo de remedo de sesión de escritorio remoto en Windows 10).

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

En los ejemplos anteriores, el uso de la conexión en la sombra para 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 remeda sesiones RDP sin otorgar permisos de administrador local en la computadora / servidor.

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

wmic /namespace:\rootCIMV2TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=”RDP-Tcp”) CALL AddAccount “woshubAllowRDSShadow”,2

Artículos Interesantes