Включение подключения удаленного рабочего стола для роли в Облачных службах Azure (классические) с помощью Visual Studio

Важно!

Облачные службы (классическая версия) объявлены устаревшими для новых клиентов. Их поддержка будет полностью прекращена 31 августа 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой . Это новая модель развертывания на основе Azure Resource Manager.

С помощью удаленного рабочего стола обеспечивается доступ к рабочему столу экземпляра, работающего в Azure. Подключение к удаленному рабочему столу позволяет диагностировать и устранять неполадки выполняющегося приложения.

Мастер публикации, доступный в Visual Studio для облачных служб, позволяет во время процесса публикации включить удаленный рабочий стол с помощью предоставленных вами учетных данных. Эта возможность будет хорошим вариантом в Visual Studio 2017 версии 15.4 и более ранних версий.

Но в Visual Studio 2017 версии 15.5 и более поздних версий не рекомендуется разрешать подключения к удаленному рабочему столу через мастер публикации, если вы не единственный разработчик в этой среде. Во всех случаях, когда проект будет открываться другими разработчиками, следует настраивать удаленный рабочий стол через портал Azure, PowerShell или конвейер выпуска в рабочем процессе непрерывного развертывания. Это связано с некоторыми особенностями взаимодействия Visual Studio с удаленным рабочим столом на виртуальных машинах в облачных службах, которые мы поясним далее в этой статье.

Настройка удаленного рабочего стола с помощью Visual Studio 2017 версии 15.4 или более ранней версии

Если вы используете Visual Studio 2017 версии 15.4 или более ранней, вы можете использовать параметр Включить удаленный рабочий стол для всех ролей в мастере публикации. В Visual Studio 2017 версии 15.5 или более поздней версии вы также можете использовать мастер публикации, но не следует выбирать в нем включение удаленного рабочего стола.

  1. Чтобы открыть мастер публикации в Visual Studio, щелкните правой кнопкой мыши проект облачной службы в обозревателе решений и выберите действие Опубликовать.

  2. Войдите в подписку Azure, если потребуется, и выберите Далее.

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

  4. В нижней части этого диалогового окна выберите Дополнительно. Это действие отобразит раскрывающийся список, в котором можно создать или выбрать сертификат, чтобы шифровать учетные данные при подключении через удаленный рабочий стол.

    Примечание

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

  5. Выберите сертификат из списка или нажмите <Создать...> . Если вы создаете новый сертификат, укажите для него понятное имя и нажмите ОК. Новый сертификат появится в раскрывающемся списке.

  6. Предоставьте имя пользователя и пароль. Нельзя использовать существующую учетную запись. Не указывайте для новой учетной записи имя Administrator.

  7. Выберите дату окончания срока действия учетной записи, после которой подключения к удаленному рабочему столу будут заблокированы.

  8. Указав все необходимые сведения, нажмите кнопку ОК. Visual Studio сохранит эти параметры удаленного рабочего стола в файлы проекта .cscfg и .csdef, при этом зашифровав пароль с помощью выбранного сертификата.

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

Настройка удаленного рабочего стола с помощью Visual Studio 2017 версии 15.5 или более поздней версии

В Visual Studio 2017 версии 15.5 или более поздней вы также можете использовать мастер публикации для проекта облачной службы. Если вы единственный разработчик в этом проекте, вы можете выбрать в мастере действие Разрешить удаленный рабочий стол для всех ролей.

Но если над проектом работает целая команда, для облачной службы Azure лучше использовать удаленный рабочий стол через портал Azure или PowerShell.

Эта рекомендация связана с тем, что в Visual Studio 2017 версии 15.5 внесены некоторые измерения во взаимодействие с виртуальной машиной облачной службы. При включении удаленного рабочего стола с помощью мастера публикации более ранние версии Visual Studio связываются с виртуальной машиной с помощью "подключаемого модуля RDP". Visual Studio 2017 версии 15.5 и более поздние взаимодействуют через более безопасное и гибкое "расширение RDP". Такое изменение связано с тем, что портал Azure и методы PowerShell для поддержки удаленного рабочего стола также применяют это расширение.

При работе с расширением удаленного рабочего стола Visual Studio передает пароль по протоколу TLS в незашифрованном виде. Но в файлах конфигурации проекта хранится только зашифрованный пароль. Чтобы получить его в обычном текстовом виде, необходимо сохранить локально и применить тот же сертификат, который использовался для его шифрования.

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

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

Applying remote desktop protocol (RDP) extension.
Certificate with thumbprint [thumbprint] doesn't exist.

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

Таким образом, при командной работе над проектом лучше всего не устанавливать этот флажок в мастере публикации, а открывать удаленный рабочий стол напрямую через портал Azure или PowerShell.

Развертывание с сервера построения с использованием Visual Studio 2017 версии 15.5 или более поздней версии

Проект облачной службы можно развернуть с сервера сборки (например, с помощью Azure DevOps Services), на котором в агенте сборки установлена Visual Studio 2017 версии 15.5 или более поздней. При такой схеме развертывание всегда выполняется с того компьютера, на котором есть нужный сертификат шифрования.

Чтобы использовать расширение удаленного рабочего стола из Azure DevOps Services, включите в конвейер сборки следующие данные:

  1. Добавьте /p:ForceRDPExtensionOverPlugin=true в аргументы MSBuild, чтобы развертывание выполнялось через расширение удаленного рабочего стола, а не подключаемый модуль удаленного рабочего стола. Пример:

    msbuild AzureCloudService5.ccproj /t:Publish /p:TargetProfile=Cloud /p:DebugType=None
        /p:SkipInvalidConfigurations=true /p:ForceRDPExtensionOverPlugin=true
    
  2. После остальных шагов сборки добавьте шаг Развертывание облачной службы Azure и настройте его свойства.

  3. После шага развертывания добавьте шаг Azure PowerShell и укажите в нем для параметра Отображаемое имя значение "Развертывание Azure: включить расширение удаленного рабочего стола" (или другое имя, которое вы сочтете подходящим) и выберите нужную подписку Azure.

  4. Для параметра Тип сценария выберите вариант "Встроенный" и вставьте приведенный ниже код в поле Встроенный сценарий. Можно также создать в проекте файл .ps1 с текстом этого скрипта, выбрать тип сценария "Путь к файлу сценария" и указать этот файл в поле Путь к скрипту.

    Param(
        [Parameter(Mandatory=$True)]
        [string]$username,
    
        [Parameter(Mandatory=$True)]
        [string]$password,
    
        [Parameter(Mandatory=$True)]
        [string]$serviceName,
    
        [Datetime]$expiry = ($(Get-Date).AddYears(1))
    )
    
    Write-Host "Service Name: $serviceName"
    Write-Host "User Name: $username"
    Write-Host "Expiry: $expiry"
    
    $securepassword = ConvertTo-SecureString -String $password -AsPlainText -Force
    $credential = New-Object System.Management.Automation.PSCredential $username,$securepassword
    
    # Try to remote existing RDP Extensions
    try
    {
        $existingRDPExtension = Get-AzureServiceRemoteDesktopExtension -ServiceName $servicename
        if ($existingRDPExtension -ne $null)
        {
            Remove-AzureServiceRemoteDesktopExtension -ServiceName $servicename -UninstallConfiguration
        }
    }
    catch
    {
    }
    
    Set-AzureServiceRemoteDesktopExtension -ServiceName $servicename -Credential $credential -Expiration $expiry -Verbose
    

Подключение к роли Azure с помощью удаленного рабочего стола

Когда вы завершите публикацию облачной службы в Azure и включите удаленный рабочий стол, вы сможете войти в виртуальную машину облачной службы с помощью обозревателя серверов Visual Studio:

  1. В обозревателе сервера разверните узел Azure , а затем разверните узел для облачной службы и одну из ее ролей, чтобы отобразить список экземпляров.

  2. Щелкните этот узел экземпляра правой кнопкой мыши и выберите действие Подключиться с помощью удаленного рабочего стола.

  3. Введите имя пользователя и пароль, созданный ранее. Вы вошли в удаленный сеанс.

Дополнительные ресурсы

Настройка облачных служб