Устранение неполадок Azure виртуальных машин с помощью средств удаленного доступа

Применимо к виртуальным машинам ✔️ Windows

Сводка

При устранении неполадок на виртуальной машине Azure можно подключиться к виртуальной машине с помощью удаленных средств, которые рассматриваются в этой статье, а не с помощью протокола Remote Desktop (RDP).

Последовательная консоль

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

Удаленное выполнение команд

Скачайте PsExec. Подключитесь к виртуальной машине с помощью следующей команды.

psexec \\<computer>-u user -s cmd

Примечание.

  • Команда должна выполняться на компьютере, который находится в той же виртуальной сети.
  • DIP или HostName можно использовать для замены <компьютера>.
  • Параметр -s гарантирует, что команда вызывается с помощью системной учетной записи (с разрешениями администратора).
  • PsExec использует TCP-порты 135 и 445. В результате на брандмауэре должны быть открыты два порта.

Выполнение команд

Дополнительные сведения об использовании функции команды выполнения для выполнения скриптов на виртуальной машине см. в статье Run PowerShell scripts in your Windows VM with run command.

Расширение настраиваемых скриптов

Можно использовать функцию расширения пользовательских сценариев для выполнения пользовательского сценария на целевой виртуальной машине. Для этого должны быть выполнены следующие условия.

  • Виртуальная машина имеет подключение к сети.

  • Azure агент виртуальной машины установлен и работает должным образом на виртуальной машине.

  • Расширение не было установлено на виртуальной машине.

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

Отправьте скрипт в учетную запись хранения и создайте собственный контейнер. Затем запустите следующий сценарий в Azure PowerShell на компьютере с подключением к виртуальной машине.

Для виртуальных машин Azure Resource Manager

#Set up the basic variables.
$subscriptionID = "<<SUBSCRIPTION ID>>"
$storageAccount = "<<STORAGE ACCOUNT>>"
$storageRG = "<<RESOURCE GROUP OF THE STORAGE ACCOUNT>>" 
$localScript = "<<FULL PATH OF THE PS1 FILE TO EXECUTE ON THE VM>>" 
$blobName = "file.ps1" #Name you want for the blob in the storage.
$vmName = "<<VM NAME>>" 
$vmResourceGroup = "<<RESOURCE GROUP>>"
$vmLocation = "<<DATACENTER>>" 
 
#Set up the Azure PowerShell module, and ensure the access to the subscription.
Login-AzAccount #Ensure login with the account associated with the subscription ID.
Get-AzSubscription -SubscriptionId $subscriptionID | Select-AzSubscription

#Set up the access to the storage account, and upload the script.
$storageKey = (Get-AzStorageAccountKey -ResourceGroupName $storageRG -Name $storageAccount).Value[0]
$context = New-AzureStorageContext -StorageAccountName $storageAccount -StorageAccountKey $storageKey
$container = "cse" + (Get-Date -Format yyyyMMddhhmmss)
New-AzureStorageContainer -Name $container -Permission Off -Context $context
Set-AzureStorageBlobContent -File $localScript -Container $container -Blob $blobName  -Context $context

#Push the script into the VM.
Set-AzVMCustomScriptExtension -Name "CustomScriptExtension" -ResourceGroupName $vmResourceGroup -VMName $vmName -Location $vmLocation -StorageAccountName $storageAccount -StorageAccountKey $storagekey -ContainerName $container -FileName $blobName -Run $blobName

Удаленный PowerShell

Примечание.

Необходимо открыть TCP-порт 5986 (HTTPS), чтобы можно было использовать эту возможность.

Для виртуальных машин Azure Resource Manager необходимо открыть порт 5986 в группе безопасности сети (NSG). Дополнительные сведения см. в статье о группах безопасности.

Для виртуальных машин RDFE необходима конечная точка с частным портом (5986) и общедоступным портом. Затем необходимо также открыть этот общедоступный порт в NSG.

Настройка клиентского компьютера

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

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

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName>

Чтобы добавить несколько виртуальных машин в список доверенных узлов:

Set-Item wsman:\localhost\Client\TrustedHosts -value <ComputerName1>,<ComputerName2>

Чтобы добавить все компьютеры в список доверенных хостов:

Set-Item wsman:\localhost\Client\TrustedHosts -value *

Включение RemotePS на виртуальной машине

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

Enable-PSRemoting -Force
New-NetFirewallRule -Name "Allow WinRM HTTPS" -DisplayName "WinRM HTTPS" -Enabled True -Profile Any -Action Allow -Direction Inbound -LocalPort 5986 -Protocol TCP
$thumbprint = (New-SelfSignedCertificate -DnsName $env:COMPUTERNAME -CertStoreLocation Cert:\LocalMachine\My).Thumbprint
$command = "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$env:computername""; CertificateThumbprint=""$thumbprint""}"
cmd.exe /C $command

Для виртуальных машин Azure Resource Manager используйте команды выполнения скриптов с портала для запуска скрипта EnableRemotePS.

Снимок экрана: шаги по запуску скрипта EnableRemotePS на портале.

Подключение к виртуальной машине

Выполните следующую команду на основе расположения клиентского компьютера:

  • Вне виртуальной сети или развертывания

    • Для виртуальной машины, созданной с помощью классической модели развертывания, выполните следующую команду:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName  "<<CLOUDSERVICENAME.cloudapp.net>>" -port "<<PUBLIC PORT NUMBER>>" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
    • Для виртуальной машины Azure Resource Manager сначала добавьте DNS-имя в общедоступный IP-адрес. Для подробных инструкций см. раздел Создание полностью квалифицированного доменного имени в портале Azure для виртуальной машины Windows. Затем выполните следующую команду:

      $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
      Enter-PSSession -ComputerName "<<DNSname.DataCenter.cloudapp.azure.com>>" -port "5986" -Credential (Get-Credential) -useSSL -SessionOption $Skip
      
  • В виртуальной сети или развертывании выполните следующую команду:

    $Skip = New-PSSessionOption -SkipCACheck -SkipCNCheck
    Enter-PSSession -ComputerName  "<<HOSTNAME>>" -port 5986 -Credential (Get-Credential) -useSSL -SessionOption $Skip
    

Примечание.

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

Можно также использовать командлет Invoke-Command для удаленного запуска скрипта на виртуальной машине.

Invoke-Command -ComputerName "<<COMPUTERNAME>" -ScriptBlock {"<<SCRIPT BLOCK>>"}

Удаленный реестр

Примечание.

TCP-порты 135 и 445 должны быть открыты для использования этой функции.

Для виртуальных машин Azure Resource Manager необходимо открыть порт 5986 в NSG (группе безопасности сети). Дополнительные сведения см. в статье о группах безопасности.

Для виртуальных машин RDFE необходима конечная точка с частным портом (5986) и общедоступным портом. Кроме того, необходимо открыть этот публичный порт в НСГ.

  1. На другой виртуальной машине в той же виртуальной сети откройте редактор реестра (regedit.exe).

  2. Выберите Файл>Подключить сетевой реестр.

    Снимок экрана опции

  3. Найдите целевую виртуальную машину по имени узла или динамическому IP-адресу (предпочтительно), введя его в поле "Введите имя объекта" для выбора.

    Снимок экрана диалогового окна

  4. Введите учетные данные для целевой виртуальной машины.

  5. Внесите в реестр необходимые изменения.

Консоль удаленных служб

Примечание.

TCP-порты 135 и 445 должны быть открыты для использования этой функции.

Для виртуальных машин Azure Resource Manager необходимо открыть порт 5986 в группе безопасности сети. Дополнительные сведения см. в статье о группах безопасности.

Для виртуальных машин RDFE необходима конечная точка с частным портом (5986) и общедоступным портом. Кроме того, необходимо открыть этот общедоступный порт в сетевой группе безопасности (NSG).

  1. На другой виртуальной машине в той же виртуальной сети откройте экземпляр Services.msc.

  2. Щелкните правой кнопкой мыши Службы (локальные).

  3. Выберите Connect to another computer (Подключение к другому компьютеру).

    Снимок экрана: параметр

  4. Введите динамический IP-адрес целевой виртуальной машины.

    Снимок экрана: поле динамического ввода IP-адресов в параметре

  5. Внесите необходимые изменения в службы.

Следующие шаги

  • Дополнительные сведения о командлете Enter-PSSession см. раздел Enter-PSSession.
  • Дополнительные сведения о расширении пользовательского скрипта для Windows с помощью классической модели развертывания см. в разделе Custom Script Extension for Windows.
  • PsExec является частью набора PSTools.
  • Дополнительные сведения о PSTools Suite см. в разделе PSTools.