Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 – Блог IT-KB

Что такое remote desktop connection manager

RDCM – это утилита от компании Microsoft, призванная из одного окна удобно управлять большим количеством удаленных RDP подключений к различным серверам:

Causes of remote desktop & activex issues?

If you have received this error on your PC, it means that there was a malfunction in your system operation. Common reasons include incorrect or failed installation or uninstallation of software that may have left invalid entries in your Windows registry, consequences of a virus or malware attack, improper system shutdown due to a power failure or another factor, someone with little technical knowledge accidentally deleting a necessary system file or registry entry, as well as a number of other causes.

More info on
remote desktop & activex issues

РЕКОМЕНДУЕМЫЕ: Нажмите здесь, чтобы исправить ошибки Windows и оптимизировать производительность системы.

Remote connection management

Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

“This is a product that I strongly believe in. Rarely does a tool come along that becomes your entire toolbox. In the course of doing my daily work, I have to make hundreds of connections to remote servers, manage those servers, databases, web sites, application servers and developers. RDM gives me a centralized, single pane of glass from which to do all of it. I can store passwords using my favorite password manager, Keepass, write and assign scripts, manage services, and build custom connections to every device, server and workstation I manage.”

Read More Reviews

Windows xp или vista

В XP можно поднять протокол с 5.1 до 7. Хотфикс

В Vista — c 6 до 7. Хотфикс имеет тот же номер, файлы windows6.0-kb969084-x64.msu или Windows6.0-KB969084-x86.msu

Доступ к rdweb серверу через браузер с поддержкой html5

После того, как вы развернули пакет Web Client на RDS сервере, вы можете запустить браузер на клиентском компьютере. Поддерживаются все последние версии браузеров Edge, IE 11, Google Chrome, Safari и Firefox (пока веб клиент RD работает далеко не на всех мобильных устройствах). Для доступа к RDS серверам из браузера вам достаточно передать пользователям ссылку на сервер RDWeb.

Использование remote desktop shadow из графического gui

Подключиться к сессии пользователя можно с помощью утилиты mstsc.exe или непосредственно из консоли Server Manager. Для этого в консоли Server Manager откройте коллекцию QuickSessionCollection

Щелкнув по сессии интересующего пользователя, выберите в контекстном меню Shadow (Теневая копия).

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

В рассмотренных выше примерах для использования теневого подключения к терминальным сессиям необходимы права локального администратора на RDS сервере. Однако можно разрешить использовать теневое (shadow) подключение для подключения к сессиям пользователей и простым пользователям (не давая им прав локального администратора на сервере).

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

wmic /namespace:\rootCIMV2TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=’RDP-Tcp’) CALL AddAccount ‘corpAllowRDSShadow’,2

В январе 2021 года после установки обновления KB4056898 (патч Windows против Meltdown и Spectre) пользователи столкнулись, что в Windows Server 2021 R2 перестал работать теневой доступ. При попытке выполнить теневое подключение к чужой сессии появляется сообщение «Неопознанная ошибка» (в логах присутствует ошибка STATUS_BAD_IMPERSONATION_LEVEL). Аналогичная проблема возникала и на RDS ферме на базе Windows Server 2021.

Для решения проблемы нужно установить отдельные обновления:

  • для Windows Server 2021 — KB4057142 (от 17 января 2021)
  • для Windows Server 2021 R2 — KB4057401 (от 17 января 2021)

Несколько замечаний напоследок

Нюанс 1

О проблемах

XP и Vista

Если проблема возникает на Windows XP или Vista, попробуйте сначала обновить протокол до 7 версии (писал в начале статьи). Обязательно включите поддержку CredSSP. На сайте Microsoft статьи уже удалены, но Интернет помнит.

Если не помогло — «доктор говорит в морг, значит в морг». Что испытала на себе операционная система за последние 15 лет — лучше об этом даже и не думать.

NLA

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

NTLM

Некоторые клиенты пытаются авторизоваться с использованием NTLMv1. Причины разные, но исправить на клиенте можно так:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa]
"LmCompatibilityLevel"=dword:00000003

Перезагрузка обязательна.

Если вы молоды и дерзки ничего не боитесь, то есть более радикальное решение — отключение Channel Binding на Remote Desktop Gateway

HKLMSoftwareMicrosoftWindows NTCurrentVersionTerminalServerGatewayConfigCore
Type: REG_DWORD
Name: EnforceChannelBinding
Value: 0 (Decimal)


Делать так не надо. Но мы делали. 🙂 Для клиента, который настаивал (нет не так, НАСТАИВАЛ) что NTLMv1 на рабочих станциях ему необходим. Не знаю, может там серверы на NT4 без SP еще в работе.

:/>  Что выбрать – GPT или MBR? Объясняем чем отличаются стандарты

Отключение RDP 8 в Windows 10

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

Плюсы/минусы

[ ] Функциональность[ ] Безопасность[ ] Кроссплатформенность[−] Запутанный и не очень удобный интерфейс[−] Ресурсоемкость и длительная выгрузка из памяти

Резюме

Таким образом, RDM — это графическая оболочка для ОС Windows, объединяющая в себе множество инструментов, предназначенных для удаленного управления, хранения, передачи файлов и даже виртуализации. Такое суперфункциональное решение несет пользу только при реальной востребованности многих функций в ущерб интуитивности.

[ ] Внушительная функциональность и возможности интеграции[−] Сложный интерфейс[ ] Умеренное быстродействие[ ] Безопасность хранения и передачи конфиденциальных данных

Теневое подключение rds shadow из powershell

Воспользоваться функционалом теневого подключения к сессии пользователя через теневое подключение Remote Desktop Services можно и из Powershell.

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

Требования к инфраструктуре веб клиента remote desktop

Remote Desktop Web Client пока доступен как расширение для роли RD Web Access на RDS серверах под управлением Windows Server 2021/2021.

Перед внедрением RD Web Client нужно убедится, что ваша RDS инфраструктура соответствует следующим требованиям:

Удаленное управление сеансом пользователя windows стандартными средствами

Однажды мне захотелось управлять одним из домашних компьютеров удаленно, но при этом взаимодействовать с текущим пользователем, но компьютер был довольно слабый и при запуске например TeamViewer’а нагрузка процессора поднималась до 98% и компьютер начинал заметно тормозить. Попробовал стандартный RDP, но тогда «выбивался» текущий пользователь и для входа локально приходилось набивать пароль. Но чуть позже мне случайно попалась команда

shadow

.

Наблюдать за другим сеансом служб удаленных рабочих столов.
SHADOW {<имя сеанса> | <ID сеанса>} [/SERVER:<сервер>] [/V]<имя сеанса> Имя сеанса.
<ID сеанса> Идентификатор сеанса.
/SERVER:<сервер> Сервер терминалов (по умолчанию текущий).
/V Отображение информации о выполненных действиях.

Например для управления консольным сеансом(пользователем который непосредственно сидит перед компьютером) текущего терминального сервера достаточно ввести команду выполнить –shadow 0. Выход осуществляется через alt * на обычном компьютере и через ctrl * на терминальном сервере.
Но есть неприятная особенность: эта команда работает только из под rdp сессии. Но мой управляемый компьютер был под управлением windows xp поэтому пришлось расширить его возможности сделав из него терминальный сервер (в интернете полно статей как это можно сделать). Тогда все стало довольно просто, подключаемся любым пользователем с правами администратора по rdp и запускаем команду выполнить –shadow 0 попадаем в консольный сеанс, собственно что мне и нужно было. Для уменьшения аппаратных затрат можно при создании rdp подключения выбрать функцию «При подключении запускать следующую программу» и там набрать shadow 0 как на рисунке.

Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

Тогда получается что запускается всего 2 процесса.

Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

Для того что бы все это работало нам необходимо сначала включить RemoteRPC, например через реестр:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server]“AllowRemoteRPC”=dword:00000001

После этого можно будет через Диспетчер служб удаленных рабочих столов посмотреть какие пользователи залогинены на компьютере, какие у них id и какие процессы запущены (жаль только названия, нет информации о нагрузке).

По умолчанию пользователю будет задаваться вопрос с разрешением управления, можно отключить вопрос или сделать только удаленное наблюдение, меняется через реестр:

[HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services]«Shadow»=dword:0000000x

Где x может иметь значения:
0 — удаленное управление не разрешено
1 -полный контроль с разрешения клиента
2 -полный контроль без разрешения клиента
3 -наблюдение за сеансом с разрешением клиента
4 -наблюдение за сеансом без разрешения клиента

По умолчания этой строчки вообще нет и её нужно будет создавать.

Так же можно включить через групповые политики локальные или доменные. Для включения локально запускаем gpedit.msc — выбираем административные шаблоны — добавление и удаление шаблонов, добавляем System.adm из папки WINDOWSinf

Теперь настраиваем: конфигурация компьютера — административные шаблоны — компоненты windows — службы терминалов — устанавливает правила для удаленного управления. Для windows xp.

И конфигурация компьютера — административные шаблоны — компоненты windows- службы удаленных рабочих столов – узел сеансов удаленных рабочих столов – подключения – устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов. Для windows 7.
Все это работает и в домене, если у пользователя есть соответствующие права.

:/>  Где посмотреть сетевые подключения

В доменных настройках профиля пользователя тоже есть настройка подобных прав (я встречал эти настройки даже в домене win 2000)
Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

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

Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

и отдельно настроить взаимодействие или управление удаленным сеансом.

Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

Для удобства можно подключаться через диспетчер задач
Remote Desktop Services – Строим отказоустойчивую ферму RD Connection Broker на базе Windows Server 2012 - Блог IT-KB

Удаленный сеанс отключен, поскольку отсутствуют доступные серверы лицензирования | windows для системных администраторов

У одного из клиентов появилась проблема с развернутой фермой терминальных серверов Remote Desktop Services на базе Windows Server 2021 R2. По какой-то причине RDS сервер перестал выдавать терминальные лицензии пользователям, хотя роль сервера лицензий была установлена и настроена, а RDP CAL активированы.

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

На русской версии Windows ошибка выглядит так:

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

The remote session was disconnected because there are no Remote Desktop License Servers available to provide a license

На самом сервере при этом регистрируется ошибка:

Event ID : 1130
Source : TerminalServices-RemoteConnectionManagerThe Remote Desktop Session Host server does not have a Remote Desktop license server specified. To specify a license server for the Remote Desktop Session Host server, use the Remote Desktop Session Host Configuration tool.

Event-ID 1130 TerminalServices-RemoteConnectionManagerС помощью Server Manager проверим, что сервер лицензирования (Remote Desktop license server) в конфигурации RDSH указан:

Настройки RD licensingПроверку настройки сервера лицензирования также можно выполнить из PowerShell:

Get-RDLicenseConfiguration

Get-RDLicenseConfigurationКак мы видим, сервер указан, и используется тип лицензирования PerUser.

Утилита RD Licensing Diagnoser также не видит каких-то проблем с настройками сервера RD и лицензиями.

RD Licensing DiagnoserС помощью консоли RD Licensing Manager (licmgr.exe) убедимся, что на сервере имеются свободные лицензии, но сами лицензии по какой-то причине пользователям не выдаются (Issued = 0).

Не выдаются лицензии RDДальнейший поиск по журналу событий вышел на следующее событие:

EventID: 1128
Source: TerminalServices-RemoteConnectionManagerThe RD Licensing grace period has expired and the service has not registered with a license server with installed licenses. A RD Licensing server is required for continuous operation. A Remote Desktop Session Host server can operate without a license server for 120 days after initial start up.

A Remote Desktop Session Host server can operate without a license server for 120 days after initial start upСудя по всему, RDSH сервер решил, что тестовый период  использования терминального сервера истек(grace period – 120 дней), и требуется его продление, либо активация на полноценном сервере лицензий RDS. Похоже на какой-то баг RDS в Windows Server 2021.

Количество дней до окончания RDS Grace Period можно узнать командой:

wmic /namespace:\rootCIMV2TerminalServices PATH Win32_TerminalServiceSetting WHERE (__CLASS !="") CALL GetGracePeriodDays

GetGracePeriodDaysДля решения данной проблемы нужно  на RDS сервере удалить ключ, определяющий льготный период лицензирования (grace period licensing). Дата, определяющая время окончания работы сервера в режиме grace хранится в ключе L$RTMTIMEBOMB (довольно забавное имя –TIME BOMB …. ;), находящемся в ветке реестра:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerRCMGracePeriod

CurrentControlSetControlTerminal ServerRCMGracePeriodНеобходимо удалить ключ L$RTMTIMEBOMB. Однако, для этого у администратора недостаточно прав.

Unable to delete all specified values.

Реестр: Unable to delete all specified valuesЧтобы удалить этот ключ, нужно предоставить своей учетной записи права владельца ветки и, затем, права на изменение (не буду подробно описывать сам процесс).

Разрешения на ветку GracePeriod

Теперь щелкаем ПКМ по ключи L$RTMTIMEBOMB и удаляем его.

Удалить ключ L$RTMTIMEBOMB

Перезагружаем сервер, подключаемся с клиента по RDP. Успешность выдачи лицензии проверяем в консоли Remote Desktop Licensing Manager.

Remote Desktop Licensing ManagerУ меня, однако, сразу не заработало. С помощью следующей PowerShell команды, проверим, задан ли сервер лицензирования:

$obj = gwmi -namespace "Root/CIMV2/TerminalServices" Win32_TerminalServiceSetting
$obj.GetSpecifiedLicenseServerList()

GetSpecifiedLicenseServerListКак вы видите, сервер лицензирования  RDS не задан (список SpecifiedLSList пуст). С помощью следующей команды укажем сервер лицензий RD.

$obj = gwmi -namespace "Root/CIMV2/TerminalServices" Win32_TerminalServiceSetting
$obj.SetSpecifiedLicenseServerList("msk-rdslic.msconfig.ru")

SetSpecifiedLicenseServerListПосле этой операции, сервер начал выдавать лицензии RD клиентам.

Установка rd web html5 клиента на windows server 2021 rds

Как мы уже говорили, на данный момент доступна версия RD Web Client для Windows Server 2021 / 2021, однако на текущий момент этот компонент не входит в состав дистрибутива WS 2021 и устанавливается отдельно.

На сервере с ролью RD Web Access необходимо установить модуль PowerShellGet:

Install-Module -Name PowerShellGet -Force

Закройте консоль PoSh и запустите еще раз. Теперь нужно установить модуль RD Web Client Management:

Install-Module -Name RDWebClientManagement

Чтобы принять лицензионное соглашение Microsoft, введите A.

Теперь нужно установить последнюю версию пакета Web Remote Desktop:

:/>  Ищем источник блокировки учетной записи пользователя в active directory

Install-RDWebClientPackage

После установки пакета, проверьте его свойства командой:

Get-RDWebClientPackage

Как вы видите, у вас появился пакет rd-html 5.0 версия 1.0.0.

Далее вам нужно с сервера с ролью RDS Broker экспортировать SSL сертификат, использующийся для SSO (Enable Single Sign On) в .cer файл (BASE64) Можно выполнить экспорт из графической оснастки управления сертификатами компьютера certlm.msc, нужный сертификат находится в разделе PersonalCertificates.

Импортируйте сертификат на сервере RD Web:

Import-RDWebClientBrokerCert C:RDBroker.cer

Теперь можно опубликовать клиент RD Web:

Publish-RDWebClientPackage -Type Production -Latest

Установка rdcm 2.7

Установка данного программного обеспечения не должна у вас вызвать каких либо проблем, так как она тривиальна. Я лишь приведу ее для целостности статьи. Устанавливать Remote Desktop Connection Manager я буду в операционной системе Windows 10 1803, на рабочем месте у меня стоит именно она.

Запускаем установку, для этого открываем файл rdcman.msi. У вас откроется мастер инсталляции, на первом шаге вы просто нажимаете “Next”.

Далее вы принимаете лицензионное соглашение, через пункт “I accept the terms in the license agreement” и нажимаете “Next”.

Далее вы задаете каталог установки, по умолчанию, это папка в C:Program Files (x86)MicrosoftRemote Desktop Connection Manager

Ну и последний шаг, это нажатие кнопки установить (install)

Через пару мгновений вы увидите, что все успешно установлено, вы можете посмотреть лог при желании, нажимаем кнопку “Finish.”

Шаг 1


Создадим в Active Directory группу безопасности

RDP_Operators

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

Шаг 2

Дадим группе права на управление терминальными сессиями на каждом из RDSH-серверов:

Шаг 3

Добавим группу в локальную группу

Пользователи удаленного рабочего стола

на каждом из RDSH-серверов. Если у вас серверы объединены в коллекции сеансов, то делаем это на уровне коллекции:

Шаг 4


Подготовим для «управленцев» такой PS-скрипт:

RDSManagement.ps1

$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)
function Invoke-RDPSessionLogoff { Param( [parameter(Mandatory=$True, Position=0)][String]$ComputerName, [parameter(Mandatory=$true, Position=1)][String]$SessionID ) $ErrorActionPreference = "Stop" logoff $SessionID /server:$ComputerName /v 2>&1
}
function Invoke-RDPShadowSession { Param( [parameter(Mandatory=$True, Position=0)][String]$ComputerName, [parameter(Mandatory=$true, Position=1)][String]$SessionID ) $ErrorActionPreference = "Stop" mstsc /shadow:$SessionID /v:$ComputerName /control 2>&1
}
Function Get-LoggedOnUser { Param( [parameter(Mandatory=$True, Position=0)][String]$ComputerName="localhost" ) $ErrorActionPreference = "Stop" Test-Connection $ComputerName -Count 1 | Out-Null quser /server:$ComputerName 2>&1 | Select-Object -Skip 1 | ForEach-Object { $CurrentLine = $_.Trim() -Replace "s "," " -Split "s" $HashProps = @{ UserName = $CurrentLine[0] ComputerName = $ComputerName } If ($CurrentLine[2] -eq "Disc") { $HashProps.SessionName = $null $HashProps.Id = $CurrentLine[1] $HashProps.State = $CurrentLine[2] $HashProps.IdleTime = $CurrentLine[3] $HashProps.LogonTime = $CurrentLine[4..6] -join " " $HashProps.LogonTime = $CurrentLine[4..($CurrentLine.GetUpperBound(0))] -join " " } else { $HashProps.SessionName = $CurrentLine[1] $HashProps.Id = $CurrentLine[2] $HashProps.State = $CurrentLine[3] $HashProps.IdleTime = $CurrentLine[4] $HashProps.LogonTime = $CurrentLine[5..($CurrentLine.GetUpperBound(0))] -join " " } New-Object -TypeName PSCustomObject -Property $HashProps | Select-Object -Property UserName, ComputerName, SessionName, Id, State, IdleTime, LogonTime }
}
$UserLogin = Read-Host -Prompt "Введите логин пользователя"
Write-Host "Поиск RDP-сессий пользователя на серверах..."
$SessionList = @()
ForEach ($Server in $Servers) { $TargetSession = $null Write-Host " Опрос сервера $Server" Try { $TargetSession = Get-LoggedOnUser -ComputerName $Server | Where-Object {$_.UserName -eq $UserLogin} } Catch { Write-Host "Ошибка: " $Error[0].Exception.Message -ForegroundColor Red Continue } If ($TargetSession) { Write-Host " Найдена сессия с ID $($TargetSession.ID) на сервере $Server" -ForegroundColor Yellow Write-Host " Что будем делать?" Write-Host " 1 - подключиться к сессии" Write-Host " 2 - завершить сессию" Write-Host " 0 - ничего" $Action = Read-Host -Prompt "Введите действие" If ($Action -eq "1") { Invoke-RDPShadowSession -ComputerName $Server -SessionID $TargetSession.ID } ElseIf ($Action -eq "2") { Invoke-RDPSessionLogoff -ComputerName $Server -SessionID $TargetSession.ID } Break } Else { Write-Host " сессий не найдено" }
}

Чтобы PS-скрипт было удобно запускать, сделаем для него оболочку в виде cmd-файла с таким же именем, как у PS-скрипта:

Элемент управления activex удаленного рабочего стола не соответствует версии клиентской оболочки

как-то другая версия этого mstscax.dll теперь находится в папке system32. перейдите в папку system32, найдите mstscax.dll щелкните правой кнопкой мыши на нем перейти к свойствам перейти к предыдущей версии, ждать его, чтобы закончить поиск, если вы видите один, то это собирается заменить существующий. но прежде чем вы сможете это сделать, вы должны взять на себя ответственность за mstscax.DLL-файл, который не работает для того, чтобы переименовать его в mstscax.старый, так что вы будете идти вкладку безопасности и делать все возможное, чтобы взять право собственности на файл. после переименования и скопировать и вставить тот, который вы нашли в предыдущей версии вкладки вы сможете запустить rds снова.

источник