Поделиться через


Внутренняя ошибка при попытке подключения к виртуальной Машине Azure через удаленный рабочий стол

Область применения: ✔️ Виртуальные машины Windows

В этой статье описаны ошибки, которые могут возникнуть при подключении к виртуальной машине в Microsoft Azure.

Примечание.

Статья была полезной? Ваши входные данные важны для нас. Нажмите кнопку "Отзывы" на этой странице, чтобы сообщить нам, насколько хорошо эта статья работала для вас или как мы можем улучшить ее.

Симптомы

Вы не можете подключиться к виртуальной машине Azure с помощью протокола удаленного рабочего стола (RDP). Подключение зависает в разделе "Настройка удаленного" или вы получите следующее сообщение об ошибке:

  • внутренняя ошибка RDP;
  • произошла внутренняя ошибка;
  • не удается подключиться к удаленному компьютеру с этого компьютера. Повторите попытку подключения. Если проблема не исчезнет, ​​обратитесь к владельцу удаленного компьютера или к администратору сети.

Причина

Эта проблема может возникнуть по следующим причинам:

  • Возможно, виртуальная машина была атакована.
  • Доступ к локальным ключам шифрования RSA невозможно.
  • протокол TLS отключен;
  • сертификат поврежден или истек срок его действия.

Решение

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

Проверка безопасности RDP

Сначала проверьте, незащищена ли группа безопасности сети для порта RDP 3389 (открыта). Если он незащищен и отображается * в качестве исходного IP-адреса для входящего трафика, ограничьте порт RDP ip-адресом конкретного пользователя, а затем проверьте доступ к RDP. Если это не удается, выполните действия, описанные в следующем разделе.

Использование последовательной консоли

Используйте последовательную консоль или восстановите виртуальную машину в автономном режиме , подключив диск ОС виртуальной машины к виртуальной машине восстановления.

Чтобы начать, подключитесь к последовательной консоли и откройте экземпляр PowerShell. Если последовательную консоль не включено на виртуальной машине, перейдите к разделу repair the VM offline(Автономное восстановление виртуальной машины).

Шаг 1. Проверка порта RDP

  1. В экземпляре PowerShell используйте NETSTAT , чтобы проверить, используется ли порт 3389 другими приложениями:

    Netstat -anob |more
    
  2. Если Termservice.exe использует порт 3389, перейдите к шагу 2. Если другая служба или приложение, отличное от Termservice.exe, использует порт 3389, выполните следующие действия.

    1. Остановите службу для приложения, которое использует службу 3389.

      Stop-Service -Name <ServiceName> -Force
      
    2. Запустите службу терминалов.

      Start-Service -Name Termservice
      
  3. Если не удается остановить приложение, или этот метод не подходит, измените порт для RDP.

    1. Измените порт.

      Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -name PortNumber -value <Hexportnumber>
      
      Stop-Service -Name Termservice -Force
      
      Start-Service -Name Termservice
      
    2. Настройте брандмауэр в соответствии с новым портом.

      Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
      
    3. Обновите группу безопасности сети для нового порта на порте RDP портала Azure.

Шаг 2. Установка правильных разрешений на самозаверяющем сертификате RDP

  1. Чтобы обновить самозаверяющий сертификат RDP, по очереди выполните следующие команды в экземпляре PowerShell.

    Import-Module PKI
    
    Set-Location Cert:\LocalMachine 
    
    $RdpCertThumbprint = 'Cert:\LocalMachine\Remote Desktop\'+((Get-ChildItem -Path 'Cert:\LocalMachine\Remote Desktop\').thumbprint) 
    
    Remove-Item -Path $RdpCertThumbprint
    
    Stop-Service -Name "SessionEnv"
    
    Start-Service -Name "SessionEnv"
    
  2. Если не удается обновить сертификат с помощью этого метода, попробуйте обновить самозаверяющий сертификат RDP удаленно.

    1. С работающей виртуальной машины с подключением к той виртуальной машине, на которой возникли проблемы, введите mmc в окнеЗапуск, чтобы открыть консоль управления (MMC).

    2. В меню Файлвыберите Add/Remove Snap-in (Добавить или удалить оснастку), выберите Сертификаты, а затем выберите Добавить.

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

    4. Перейдите в папку Remote Desktop\Certificates (Удаленный рабочий стол или сертификаты), щелкните правой кнопкой мыши сертификат и затем щелкните Удалить.

    5. В экземпляре PowerShell из последовательной консоли перезапустите службу настройки удаленного рабочего стола.

      Stop-Service -Name "SessionEnv"
      
      Start-Service -Name "SessionEnv"
      
  3. Сбросьте разрешение для папки MachineKeys

    remove-module psreadline 
    
    md c:\temp
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt 
    
    takeown /f "C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"
    
    icacls C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt 
    
    Restart-Service TermService -Force
    
  4. Перезапустите виртуальную машину, а затем повторите попытку подключения к виртуальной машине с удаленного рабочего стола. Если ошибку не удалось устранить, перейдите к следующему шагу.

Шаг 3. Включение всех поддерживаемых версий протокола TLS

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

  1. В экземпляре CMD включите протокол TLS.

    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  2. Чтобы предотвратить перезапись изменений политики AD, временно остановите обновление групповой политики.

    REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
    
  3. Чтобы изменения вступили в силу, перезапустите виртуальную машину. Если проблема устранена, выполните следующую команду, чтобы снова включить групповую политику.

    sc config gpsvc start= auto sc start gpsvc
    
    gpupdate /force
    

    Если изменение отменено, это означает, что в домене вашей компании уже имеется политика Active Directory. Чтобы впредь избежать этой проблемы, необходимо изменить эту политику.

Автономное восстановление виртуальной машины

Подключите диск ОС к виртуальной машине восстановления.

  1. Устранение неполадок с виртуальной машиной Windows при подключении диска операционной системы к виртуальной машине восстановления с помощью портала Azure.
  2. После подключения диска ОС к виртуальной машине восстановления убедитесь, что в консоли управления дисками он помечен как В сети. Запишите или запомните букву диска, которая присвоена подключенному диску ОС.
  3. Установите подключение с помощью удаленного рабочего стола к виртуальной машине, используемой для восстановления.

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

Чтобы включить журнал дампа и последовательную консоль, выполните следующий сценарий.

  1. Откройте сеанс командной строки с повышенными привилегиями (запуск от имени администратора).

  2. Запустите следующий сценарий:

    В этом сценарии мы предполагаем, что подключенному диску ОС присвоена буква F. Замените ее соответствующим значением для своей виртуальной машины.

    reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM
    
    REM Enable Serial Console
    bcdedit /store F:\boot\bcd /set {bootmgr} displaybootmenu yes
    bcdedit /store F:\boot\bcd /set {bootmgr} timeout 5
    bcdedit /store F:\boot\bcd /set {bootmgr} bootems yes
    bcdedit /store F:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON
    bcdedit /store F:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
    REM Suggested configuration to enable OS Dump
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    
    reg unload HKLM\BROKENSYSTEM
    

Сброс разрешения для папки MachineKeys

  1. Откройте сеанс командной строки с повышенными привилегиями (запуск от имени администратора).

  2. Запустите указанный ниже скрипт. В этом сценарии мы предполагаем, что подключенному диску ОС присвоена буква F. Замените ее соответствующим значением для своей виртуальной машины.

    Md F:\temp
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\BeforeScript_permissions.txt
    
    takeown /f "F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys" /a /r
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\System:(F)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "NT AUTHORITY\NETWORK SERVICE:(R)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c /grant "BUILTIN\Administrators:(F)"
    
    icacls F:\ProgramData\Microsoft\Crypto\RSA\MachineKeys /t /c > c:\temp\AfterScript_permissions.txt
    

Шаг 3. Включение всех поддерживаемых версий протокола TLS

  1. Отройте сеанс командной строки с повышенными привилегиями (Запуск от имени администратора) и выполните приведенные ниже команды. В этом сценарии мы предполагаем, что подключенному диску ОС присвоена буква F. Замените ее соответствующим значением для своей виртуальной машины.

  2. Проверьте, который протокол TLS включен.

    reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  3. Если ключ не существует, или его значение 0, включите протокол, выполнив следующие сценарии.

    REM Enable TLS 1.0, TLS 1.1 and TLS 1.2
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
    
  4. Включите NLA.

    REM Enable NLA
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f
    
    reg unload HKLM\BROKENSYSTEM
    
  5. Отключите диск ОС и повторно создайте виртуальную машину, а затем проверьте, устранена ли проблема.

Свяжитесь с нами для получения помощи

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