Теневое подключение RDP (Shadow), секреты и настройка
- 💻 Что такое теневой сеанс Remote Desktop Shadowing?
- ⚙️ Какие порты использует теневое копирование служб удаленных рабочих столов
- Какой уровень прав необходим для использования Remote Desktop Services Shadowing
- ⚒ Настройка групповой политики управления теневыми подключениями к RDS сессиям в Windows
- 🌐 Подключение Remote Desktop Shadow из графического интерфейса
- 🔍 Логирование сессий теневого копирования
- Как использовать теневое подключение через PowerShell и командную строку
- Удобный Bat файл для использования Remote Desktop Services Shadowing в командной строке
- Как дать права на теневые сеансы не администраторам
- Массовая настройка теневого подключения для не администраторов
- Устранение непредвиденной ошибки
Добрый день! Уважаемые читатели и гости одного из крупнейших 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).
Найти данную политику можно по пути:
Она будет иметь название "Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов (Set rules for remote control of Remote Desktop Services user sessions)"
Чтобы получить текущее значение ключа Shadow, вам необходимо на конечном компьютере открыть командную строку и ввести:
Его также можно установить вручную с помощью командной строки, введя следующую команду:
Чтобы удалить тип теневого ключа:
🌐 Подключение Remote Desktop Shadow из графического интерфейса
Данный метод является наверное самым удобным, так как позволяет визуально все видеть, контролировать. Все, что вам нужно это собранная оснастка по управлению RDS фермой в диспетчере серверов, как это делать смотрите по ссылке слева. В качестве тестового пользователя я буду использовать Барбоскина Геннадия Викторовичу (Barboskin.g). Для начала давайте его найдем, для этого в оснастке выберите нужную коллекцию, в области "Подключения" произведите поиск вашего пользователя. После его нахождения кликните по нему правым кликом, в контекстном меню вы увидите пункт "Теневая копия (Shadow)".
У вас появится дополнительное окно с параметрами теневой копии:
- Удаленный сеанс - Просмотреть/Управление. Тут либо вы просто наблюдатель, все действия делает сам пользователь или же полный контроль.
- Запрашивать согласие пользователя
У пользователя на удаленном сервере появится окно "Запрос на удаленное наблюдение. Пользователь запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос? (User is requesting to view your session remotely. Do you accept the request?) ", тут он может подтвердить или отказаться.
Если у вас явным образом не задано отсутствие данного окна, то вы получите ошибку, если захотите подключиться без уведомления.
Если конечный пользователь подтвердил запрос на удаленное наблюдение, то у вас должно открыться новое RDP окно, где будет отображена сессия удаленного пользователя и с ней можно взаимодействовать.
Если пользователь закроет окно RDP подключения, то он перейдет в статус "Отключен (Disconnected)", то вас выкинет из сессии теневого копирования. Вы увидите:
Второй вариант, которым я могу пользоваться при теневом копировании к пользователю RDP, это использование бесплатного ПО по работе с RDS. Оно называется Terminal Services Manager, о нем я вам делал подробный обзор. Найдите в списке пользователей нужного вам, кликните по нему правым кликом и выберите пункт "Shadow".
У вас так же появится окно, где вы должны запросить доступ с нужным уровнем, а далее все как описано выше.
🔍 Логирование сессий теневого копирования
Если у вас появится желание отслеживать данные, о подключениях с использованием теневого копирования, то вам необходимо на сервере куда производилось затемнение сеанса перейти в журнал:
Вот такая будет последовательность.
- Событие ID 20508
- Событие ID 20503
- Событие ID 20504
- Событие ID 20513
- Событие ID 20510
Как использовать теневое подключение через PowerShell и командную строку
Напоминаю, что в качестве клиентской ОС у меня установлена Windows 11, а подключаться я буду к сессия пользователя работающего за Windows Server 2022. Для того, чтобы мы могли из PowerShell или командной строки использовать теневое копирование, мы должны вызвать утилиту mstsc.
mstsc - это по сити встроенный RDP клиент в операционной системе Windows. Запустите оболочку PowerShell и введите:
В результате вы получите полную справку по данной утилите со всеми ключами. Тут нас будут интересовать из всего перечня 4 ключа:
- /prompt - По сути это ключ для запуска процедуры от другого пользователя. Например вы локально сидите под обычной учетной записью, а команду хотите запускать из под административной.
- /shadow:sessionID – подключиться к указанной сессии пользователя по ID;
- /control – Дает вам возможность полного управления мышкой и клавиатурой при теневой сессии.
- noConsentPrompt - Разрешает удаленное управления без согласования пользователем
- /v:servername – можно указать имя удаленного хоста (RDP/RDS терминального сервера). Если имя сервера не указано, выполняется подключение к локальным сеансам на текущем хосте;
Перед использованием RDS Shadowing мне нужно выяснить SessionID клиента к которому буду подключаться, как это сделать я уже рассказывал. Я для своего обзора буду использовать камандлет Get-TSSession.
Нужный мне SessionID 517.
Теперь подключаемся к сессии пользователя на удаленном сервере, для этого конструкция будет такой:
Если вы запускаете с запросом учетных данных другого пользователя, то появится всплывающее окно с вводом логина и пароля.
У удаленного пользователя работающего по RDP появится всплывающее окно, где он должен подтвердить ваш запрос:
Удобный Bat файл для использования Remote Desktop Services Shadowing в командной строке
Создайте из текстового файла batник, поменяв расширение. И добавьте вот такое содержимое, теперь при его запуске будет выводиться список сеансов и удобный запрос ID.
mode con:cols=100 lines=30
query session
echo
set /p usersession= Enter the session ID:
mstsc /shadow:%usersession% /control /noconsentprompt
Как дать права на теневые сеансы не администраторам
Как я указывал выше, теневое копирование можно использовать по умолчанию, только администраторам конечного сервера, НО если у вас есть, например техническая поддержка, которая помогает пользователям удаленного рабочего стола устранять через теневые сеансы их проблемы, и вы не хотите их делать администраторами на серверах, то вы можете делегировать им права, только на данный функционал.
И так, режим shadow для непривилегированного пользователя в Windows Server организовывается через PowerShell. Вам необходимо имя группы, для которой будут делегированы права и выполнить команду на конечном сервере. Но для начала давайте посмотрим у кого уже есть такие права. Для этого в оболочке PowerShell выполните:
Для cmd:
Обратите тут на поле _GENUS - это как раз разрешение. Данная команда вам будет полезна, когда вы добавите группу и проверите, появилась ли она тут. Цифра 2 в конце определяет тип доступа:
- 0 = WINSTATION_GUEST_ACCESS
- 1 = WINSTATION_USER_ACCESS
- 2 = WINSTATION_ALL_ACCESS
Далее я дам права для группы ROOT\RDP-SHADOW-SESSION, чтобы она могла использовать Remote Desktop Services Shadowing.
Проверим, что они появились
Чтобы удалить права, выполните:
Массовая настройка теневого подключения для не администраторов
Если у вас, как в моей компании 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 года.
- Windows Server 2016 — KB4057142 (от 17 января 2018)
- Windows Server 2012 R2 — KB4057401 (от 17 января 2018)
Я использую вот такой bat. Запускать его надо с правами админа на TS
(
qwinsta
@echo off
set /P rid=»Choose ID of remote user: »
start mstsc /shadow:%rid% /control
)
Спасибо, что поделились
Здравствуйте! А как осуществить ТЕНЕВОЙ доступ к удалённому компьютеру через RDP с телефона на базе ОС Android?
На этой платформе есть приложение официальное Microsoft RDP, но при подключении с его помощью сеанс ведёт себя НЕ как Теневой (то есть удалённый компьютер блокирует сеанс).
Вообще это интересный вопрос, я бы смотрел в стороны приложений терминала
А как удалить выданные права при массовой настройке на RDSH?
Удалить человека из группы, для которой вы выдавали права или забрать административные права на этом компьютере
Имеется ввиду, как вернуть все назад, удалить права для этой группы полностью? Сменой прав на 0 не получилось.