Теневое подключение RDP (Shadow), секреты и настройка

Обновлено 15.03.2022

shadow rdp

Добрый день! Уважаемые читатели и гости одного из крупнейших IT блогов по системному администрированию Pyatilistnik.org. В прошлый раз мы с вами разобрали установку Hyper-V в Windows 11. Сегодня я хочу с вами разобрать тему удобной поддержки пользователей встроенными средствами Windows. Речь пойдет, о теневом подключении RDP или Remote Desktop Shadowing. Мы рассмотрим, как она реализована, как предоставляются права и многое другое. Статья получиться большой, но поверьте оно того стоит. Благодаря этому вы сможете сэкономить бюджеты компании, отказавшись от стороннего ПО.

💻 Что такое теневой сеанс Remote Desktop Shadowing?

Все мы прекрасно помним 2020 год, когда массово вводились ограничения и все пользователи переходили на дистанционное положение. Это заставило все компании организовать для сотрудников рабочее окружение, и самое главное это отслеживание и предоставление удаленной помощи, при возникших проблемах. Для удаленной помощи используется много различного программного обеспечения, например teamviewer, VNC, Dameware и многое другое, большая проблема в том, что все они платные для коммерческого использования. Не все компании готовы платить за это деньги, но в Windows есть и встроенная возможность, о которой многие просто не знают.

Режим Shadow (теневой сеанс RDP/RDS) - Это встроенное средство, позволяющее системным администраторам производить подключение в RDP сессию любого пользователя, видя его экран, имея возможность производить любые манипуляции курсором и сеансом, одним словом полное взаимодействие. Remote Desktop Shadowing идет в составе начиная с Windows 8.1, Windows Server 2012 R2 и выше.

Теневое копирование служб удаленных рабочих столов имеет как графический интерфейс, так и утилиту командной строки. Есть две версии функции. Так как устаревшая версия Remote Desktop Services Shadowing несовместима с последней версией утилиты, то я не буду подробно описывать предыдущую версию, а лишь упомяну несколько слов в качестве исторической справки. В более ранних версиях Windows файл shadow.exe позволял пользователю подключаться к удаленному узлу с помощью метода теневого копирования служб удаленных рабочих столов. Короче говоря, это предшественник утилиты mstsc и ее параметра /shadow. Он был представлен в Windows Server 2003 и доступен во многих версиях Windows.

Кроме того, есть два приложения с графическим интерфейсом, и они делают одно и то же: управление службами терминалов (TSAdmin), которое присутствует с Windows Server 2003, и диспетчер служб удаленных рабочих столов (RDSM), который является частью инструментов удаленного администрирования сервера (RSAT) и заменяет TSAdmin в Windows Server 2012.

Ключевое различие между версиями RDS Shadowing заключается в том, что в устаревшей версии вы должны сначала установить соединение RDP, чтобы получить сеанс на удаленном хосте, прежде чем вы сможете затенить чей-либо еще сеанс на этом хосте. В последней версии вы можете затенить сеанс пользователя на удаленном хосте с консоли вашего собственного хоста. В этой статье мы рассмотрим, как настроить и использовать RDS Shadowing для подключения к RDP сессиям пользователей в Windows Server 2022 и Windows 11.

⚙️ Какие порты использует теневое копирование служб удаленных рабочих столов

Функция теневого копирования служб удаленных рабочих столов не использует порт 3389/TCP (RDP), вместо этого он использует порт 445/TCP (SMB) и эфемерные порты, также известные как динамический диапазон портов (RPC). Так же на удаленном компьютере, куда вы будите производить подключения должны быть добавлены правила:

  • Первое правило называется "File and Printer Sharing (SMB-In)", которое позволяет подключаться к порту 445/TCP;
  • Второй есть "Remote Desktop - Shadow (TCP-In)". Это позволяет %SystemRoot%\system32\RdpSa.exe двоичному файлу обрабатывать входящие соединения на любом локальном TCP-порту. Динамический диапазон портов в Windows обычно включает TCP-порты с 49152 по 65535.

Какой уровень прав необходим для использования Remote Desktop Services Shadowing

Для того, чтобы вы могли производить теневое подключение к пользователям RDS фермы или отдельным серверам, вам нужны права администратора на конечных серверах, но и это можно обойти, произведя точечное делегирование прав на функцию shadow, не имея при этом административного доступа на конечных серверах. Как это организовать я покажу, немного ниже.

⚒ Настройка групповой политики управления теневыми подключениями к RDS сессиям в Windows

Перед тем, как мы с вами разберем практические методы подключения Remote Desktop Shadow, нам нужно настроить групповую политику, которая будет определять, как оператор, кто будет помогать конечному пользователю, будет с ним взаимодействовать. У системного администратора есть возможность оставить пользователю одобрение подключения или же можно сделать без уведомления, существует пять вариантов политики.

  • No remote control allowed — удаленное управление не разрешено (значение параметра реестра 0) - Идет по умолчанию, если политика не задана
  • Full Control with users’s permission — полный контроль сессии с разрешения пользователя (значение параметра реестра 1 )
  • Full Control without users’s permission — полный контроль без разрешения пользователя (значение параметра реестра 2)
  • View Session with users’s permission – наблюдение за сеансом с разрешением пользователя (значение параметра реестра 3)
  • View Session without users’s permission – наблюдение за сеансом без разрешения пользователя (значение параметра реестра 4).

Данный ключ реестра можно найти в разделе HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services под названием "Shadow"

Найти данную политику можно по пути:

Конфигурация Компьютера - Политики - Административные шаблоны - Компоненты Windows - Службы удаленных рабочих столов - Узел сеансов удаленных рабочих столов - Подключения (Policies - Administrative Templates - Windows components - Remote Desktop Services - Remote Session Host - Connections)

Она будет иметь название "Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов (Set rules for remote control of Remote Desktop Services user sessions)"

Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов

Чтобы получить текущее значение ключа Shadow, вам необходимо на конечном компьютере открыть командную строку и ввести:

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow

Его также можно установить вручную с помощью командной строки, введя следующую команду:

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

Чтобы удалить тип теневого ключа:

reg delete "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /f

🌐 Подключение Remote Desktop Shadow из графического интерфейса

Данный метод является наверное самым удобным, так как позволяет визуально все видеть, контролировать. Все, что вам нужно это собранная оснастка по управлению RDS фермой в диспетчере серверов, как это делать смотрите по ссылке слева. В качестве тестового пользователя я буду использовать Барбоскина Геннадия Викторовичу (Barboskin.g). Для начала давайте его найдем, для этого в оснастке выберите нужную коллекцию, в области "Подключения" произведите поиск вашего пользователя. После его нахождения кликните по нему правым кликом, в контекстном меню вы увидите пункт "Теневая копия (Shadow)".

Подключение Remote Desktop Shadow из графического интерфейса

У вас появится дополнительное окно с параметрами теневой копии:

  • Удаленный сеанс - Просмотреть/Управление. Тут либо вы просто наблюдатель, все действия делает сам пользователь или же полный контроль.
  • Запрашивать согласие пользователя

Параметры теневого копирования в RDS

У пользователя на удаленном сервере появится окно "Запрос на удаленное наблюдение. Пользователь запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос? (User is requesting to view your session remotely. Do you accept the request?) ", тут он может подтвердить или отказаться.

Хочу напомнить, что вы можете управлять данным окном, будет оно требоваться или нет, через групповые политики.

Запрос на удаленное наблюдение

Если у вас явным образом не задано отсутствие данного окна, то вы получите ошибку, если захотите подключиться без уведомления.

Согласно настройкам групповой политики требуется согласие пользователя. Проверьте настройки групповой политики (The Group Policy setting is configured to require the user’s consent)
The Group Policy setting is configured to require the user’s consent

Если конечный пользователь подтвердил запрос на удаленное наблюдение, то у вас должно открыться новое RDP окно, где будет отображена сессия удаленного пользователя и с ней можно взаимодействовать.

Сеанс теневого копирования

Если пользователь закроет окно RDP подключения, то он перейдет в статус "Отключен (Disconnected)", то вас выкинет из сессии теневого копирования. Вы увидите:

Сеанс с теневым доступом был отключен

Сеанс с теневым доступом был отключен

Подключиться к сеансу в статусе "Отключен (Disconnected)" не получиться, опция "Теневая копия (Shadow)" просто не будет присутствовать в списке

сеанс в статусе "Отключен (Disconnected)

Чтобы завершить сессию пользователя и выйти из shadow-режима, нужно нажать сочетание клавиш ALT+* на рабочей станции или Ctrl+* на RDS сервере (Так же можно переопределить данные комбинации).

Второй вариант, которым я могу пользоваться при теневом копировании к пользователю RDP, это использование бесплатного ПО по работе с RDS. Оно называется Terminal Services Manager, о нем я вам делал подробный обзор. Найдите в списке пользователей нужного вам, кликните по нему правым кликом и выберите пункт "Shadow".

Использование Shadow в Terminal Services Manager

У вас так же появится окно, где вы должны запросить доступ с нужным уровнем, а далее все как описано выше.

Использование Shadow в Terminal Services Manager

🔍 Логирование сессий теневого копирования

Если у вас появится желание отслеживать данные, о подключениях с использованием теневого копирования, то вам необходимо на сервере куда производилось затемнение сеанса перейти в журнал:

Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational

Вот такая будет последовательность.

  • Событие ID 20508

Событие ID 20508: Предоставлено разрешение на теневой просмотр. Пользователь barboskin.g (идентификатор сеанса: 440) предоставил разрешение пользователю Сёмину Ивану

Событие ID 20508

  • Событие ID 20503

Событие ID 20503: Запущен теневой просмотр сеанса. Просмотр пользователем (Иван Сёмин) на компьютере c-10-.root.pyatilistnik.org сеанса пользователя ROOT\barboskin.g (идентификатор сеанса: 440)

Событие 20503

  • Событие ID 20504

Событие ID 20504 : Остановлен теневой просмотр сеанса. Просмотр пользователем (Семин Иван) на компьютере c-10.root.pyatilistnik.org сеанса пользователя ROOT\barboskin.g (идентификатор сеанса: 440)

Событие ID 20504 

  • Событие ID 20513

Событие ID 20513: Сбой теневого доступа к сеансу. Пользователю (Иван Сёмин) не удалось получить теневой доступ к сеансу пользователя Root\barboskin.g (идентификатор сеанса: 440) из-за настроек групповой политики.

Событие ID 20513

  • Событие ID 20510

Событие ID 20510: Предоставлено разрешение на теневое управление. Пользователь ROOT\barboskin.g (идентификатор сеанса: 440) предоставил разрешение пользователю (Иван Сёмин)

Событие ID 20510

Как использовать теневое подключение через PowerShell и командную строку

Напоминаю, что в качестве клиентской ОС у меня установлена Windows 11, а подключаться я буду к сессия пользователя работающего за Windows Server 2022. Для того, чтобы мы могли из PowerShell или командной строки использовать теневое копирование, мы должны вызвать утилиту mstsc.

mstsc - это по сити встроенный RDP клиент в операционной системе Windows. Запустите оболочку PowerShell и введите:

mstsc /?

В результате вы получите полную справку по данной утилите со всеми ключами. Тут нас будут интересовать из всего перечня 4 ключа:

  • /prompt - По сути это ключ для запуска процедуры от другого пользователя. Например вы локально сидите под обычной учетной записью, а команду хотите запускать из под административной.
  • /shadow:sessionID – подключиться к указанной сессии пользователя по ID;
  • /control – Дает вам возможность полного управления мышкой и клавиатурой при теневой сессии.
  • noConsentPrompt - Разрешает удаленное управления без согласования пользователем
  • /v:servername – можно указать имя удаленного хоста (RDP/RDS терминального сервера). Если имя сервера не указано, выполняется подключение к локальным сеансам на текущем хосте;

Справка mstsc

Перед использованием RDS Shadowing мне нужно выяснить SessionID клиента к которому буду подключаться, как это сделать я уже рассказывал. Я для своего обзора буду использовать камандлет Get-TSSession.

Get-TSSession -ComputerName Имя сервера

Нужный мне SessionID 517.

Получение SessionID в Get-TSSession

Теперь подключаемся к сессии пользователя на удаленном сервере, для этого конструкция будет такой:

mstsc /v:term /shadow:517 /control /prompt

Кстати если будет писать, что не правильное имя компьютера, то уберите в команде номер порта

Если вы запускаете с запросом учетных данных другого пользователя, то появится всплывающее окно с вводом логина и пароля.

теневое копирование в powershell

У удаленного пользователя работающего по RDP появится всплывающее окно, где он должен подтвердить ваш запрос:

Пользователь запрашивает удаленное управление вашим сеансом. Вы принимаете этот запрос?

Запрос на подключение shadow

Удобный Bat файл для использования Remote Desktop Services Shadowing в командной строке

Создайте из текстового файла batник, поменяв расширение. И добавьте вот такое содержимое, теперь при его запуске будет выводиться список сеансов и удобный запрос ID.

@echo off
mode con:cols=100 lines=30
query session
echo
set /p usersession= Enter the session ID:
mstsc /shadow:%usersession% /control /noconsentprompt

Bat файл для использования Remote Desktop Services Shadowing в командной строке

Как дать права на теневые сеансы не администраторам

Как я указывал выше, теневое копирование можно использовать по умолчанию, только администраторам конечного сервера, НО если у вас есть, например техническая поддержка, которая помогает пользователям удаленного рабочего стола устранять через теневые сеансы их проблемы, и вы не хотите их делать администраторами на серверах, то вы можете делегировать им права, только на данный функционал.

И так, режим shadow для непривилегированного пользователя в Windows Server организовывается через PowerShell. Вам необходимо имя группы, для которой будут делегированы права и выполнить команду на конечном сервере. Но для начала давайте посмотрим  у кого уже есть такие права. Для этого в оболочке PowerShell выполните:

Get-WmiObject Win32_TSAccount -Namespace root\CIMV2\TerminalServices -Filter "TerminalName='RDP-Tcp'"

Для cmd:

Обратите тут на поле _GENUS - это как раз разрешение. Данная команда вам будет полезна, когда вы добавите группу и проверите, появилась ли она тут. Цифра 2 в конце определяет тип доступа:

  • 0 = WINSTATION_GUEST_ACCESS
  • 1 = WINSTATION_USER_ACCESS
  • 2 = WINSTATION_ALL_ACCESS

как посмотреть права на теневое подключение

Далее я дам права для группы ROOT\RDP-SHADOW-SESSION, чтобы она могла использовать Remote Desktop Services Shadowing.

wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName="RDP-Tcp") CALL AddAccount "ROOT\RDP-SHADOW-SESSION",2

добавление прав на теневое подключение

Не забываем, что вам потребуется произвести перезагрузку сервера, чтобы все вступило в силу

Проверим, что они появились

успешное добавление прав на теневое подключение

Чтобы удалить права, выполните:

$Group = @(gwmi -Namespace Root\CIMv2\TerminalServices -query "select * from Win32_TSAccount where TerminalName="RDP-TCP" AND AccountName="ROOT\RDP-SHADOW-SESSION")

$Group.Delete()

Массовая настройка теневого подключения для не администраторов

Если у вас, как в моей компании RDS ферма состоит из 50 и более RDSH хостов, то чтобы вам не ходить по каждому из них, нужно воспользоваться вот таким моим скриптом PowerShell.

function Date {Get-Date -Format "yyyy.MM.dd HH:mm:ss"}

# Тут подгружаем файл со списком серверов

$comps_file = "$PSScriptRoot\servers.txt"

foreach ($server in (Get-Content $comps_file))
{
"$(Date) Trying to process server $server"

# wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName ="RDP-Tcp") CALL AddAccount ,2

$status = $null

$rds = Get-WmiObject -Namespace root/cimv2/terminalservices -Class Win32_TSPermissionsSetting -Filter "TerminalName = 'RDP-Tcp'" -ComputerName $server
$status = $rds.AddAccount("ROOT\RDP-SHADOW-SESSION",2)

if ($status.ReturnValue -eq 0)
{
"$(Date) All good"
}
else
{
"$(Date) Something went wrong"
}
}

Устранение непредвиденной ошибки

В Windows Server 2012R2-2016 вы можете получить ошибку "Неопознанная ошибка или Произошла внутренняя ошибка" при попытке использования функционала shadow. Тут все дело в том, что у вас не установлены обновления от 2018 года.

Неопознанная ошибка

в логах вы можете обнаружить события STATUS_BAD_IMPERSONATION_LEVEL

  • Windows Server 2016 — KB4057142 (от 17 января 2018)
  • Windows Server 2012 R2 — KB4057401 (от 17 января 2018)

2 Responses to Теневое подключение RDP (Shadow), секреты и настройка

  1. SAM:

    Я использую вот такой bat. Запускать его надо с правами админа на TS
    (
    qwinsta
    @echo off
    set /P rid=»Choose ID of remote user: »
    start mstsc /shadow:%rid% /control
    )

  2. Иван Семин:

    Спасибо, что поделились

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *