Udostępnij za pośrednictwem


Podczas próby nawiązania połączenia z maszyną wirtualną platformy Azure za pośrednictwem pulpitu zdalnego występuje błąd wewnętrzny

W tym artykule opisano błąd, który może wystąpić podczas próby nawiązania połączenia z maszyną wirtualną na platformie Microsoft Azure.

Uwaga

Czy ten artykuł był pomocny? Twoje dane wejściowe są dla nas ważne. Użyj przycisku Opinie na tej stronie, aby poinformować nas, jak dobrze działa ten artykuł dla Ciebie lub jak możemy go ulepszyć.

Symptomy

Nie można nawiązać połączenia z maszyną wirtualną platformy Azure przy użyciu protokołu pulpitu zdalnego (RDP). Połączenie utknie w sekcji Konfigurowanie zdalnego lub zostanie wyświetlony następujący komunikat o błędzie:

  • Błąd wewnętrzny protokołu RDP
  • Wystąpił błąd wewnętrzny
  • Nie można połączyć tego komputera z komputerem zdalnym. Spróbuj połączyć się ponownie później. Jeśli problem będzie się powtarzać, skontaktuj się z właścicielem komputera zdalnego lub administratorem sieci

Przyczyna

Ten problem może wystąpić z następujących powodów:

  • Maszyna wirtualna mogła zostać zaatakowana.
  • Nie można uzyskać dostępu do lokalnych kluczy szyfrowania RSA.
  • Protokół TLS jest wyłączony.
  • Certyfikat jest uszkodzony lub wygasł.

Rozwiązanie

Aby rozwiązać ten problem, wykonaj kroki opisane w poniższych sekcjach. Przed rozpoczęciem wykonaj migawkę dysku systemu operacyjnego maszyny wirtualnej, którego dotyczy problem, jako kopię zapasową. Aby uzyskać więcej informacji, zobacz Migawka dysku.

Sprawdzanie zabezpieczeń protokołu RDP

Najpierw sprawdź, czy sieciowa grupa zabezpieczeń dla portu RDP 3389 jest niezabezpieczona (otwarta). Jeśli jest niezabezpieczony i jest wyświetlany * jako źródłowy adres IP dla ruchu przychodzącego, ogranicz port RDP do adresu IP użytkownika specifc, a następnie przetestuj dostęp RDP. Jeśli to się nie powiedzie, wykonaj kroki opisane w następnej sekcji.

Używanie kontrolki szeregowej

Użyj konsoli szeregowej lub napraw maszynę wirtualną w trybie offline , dołączając dysk systemu operacyjnego maszyny wirtualnej do maszyny wirtualnej odzyskiwania.

Aby rozpocząć, połącz się z konsolą szeregową i otwórz wystąpienie programu PowerShell. Jeśli konsola szeregowa nie jest włączona na maszynie wirtualnej, przejdź do sekcji Napraw maszynę wirtualną w trybie offline .

Krok: 1. Sprawdzanie portu RDP

  1. W wystąpieniu programu PowerShell użyj parametru NETSTAT , aby sprawdzić, czy port 3389 jest używany przez inne aplikacje:

    Netstat -anob |more
    
  2. Jeśli Termservice.exe używa portu 3389, przejdź do kroku 2. Jeśli inna usługa lub aplikacja inna niż Termservice.exe używa portu 3389, wykonaj następujące kroki:

    1. Zatrzymaj usługę dla aplikacji korzystającej z usługi 3389:

      Stop-Service -Name <ServiceName> -Force
      
    2. Uruchom usługę terminalową:

      Start-Service -Name Termservice
      
  3. Jeśli nie można zatrzymać aplikacji lub ta metoda nie ma zastosowania do Ciebie, zmień port protokołu RDP:

    1. Zmień port:

      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. Ustaw zaporę dla nowego portu:

      Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
      
    3. Zaktualizuj sieciowej grupy zabezpieczeń dla nowego portu w Azure Portal portu RDP.

Krok 2. Ustawianie prawidłowych uprawnień certyfikatu z podpisem własnym protokołu RDP

  1. W wystąpieniu programu PowerShell uruchom następujące polecenia jeden po drugim, aby odnowić certyfikat rdp z podpisem własnym:

    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. Jeśli nie możesz odnowić certyfikatu przy użyciu tej metody, spróbuj zdalnie odnowić certyfikat RDP z podpisem własnym:

    1. Z działającej maszyny wirtualnej, która ma łączność z maszyną wirtualną, na którą występują problemy, wpisz mmc w polu Uruchom , aby otworzyć konsolę zarządzania firmy Microsoft.

    2. W menu Plik wybierz pozycję Dodaj/Usuń przystawkę, wybierz pozycję Certyfikaty, a następnie wybierz pozycję Dodaj.

    3. Wybierz pozycję Konta komputerów, wybierz pozycję Inny komputer, a następnie dodaj adres IP problematycznej maszyny wirtualnej.

    4. Przejdź do folderu Pulpit zdalny\Certyfikaty , kliknij prawym przyciskiem myszy certyfikat, a następnie wybierz pozycję Usuń.

    5. W wystąpieniu programu PowerShell z konsoli szeregowej uruchom ponownie usługę konfiguracji pulpitu zdalnego:

      Stop-Service -Name "SessionEnv"
      
      Start-Service -Name "SessionEnv"
      
  3. Zresetuj uprawnienie dla folderu 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. Uruchom ponownie maszynę wirtualną, a następnie spróbuj uruchomić połączenie pulpitu zdalnego z maszyną wirtualną. Jeśli błąd nadal występuje, przejdź do następnego kroku.

Krok 3. Włączanie wszystkich obsługiwanych wersji protokołu TLS

Klient RDP używa protokołu TLS 1.0 jako protokołu domyślnego. Można to jednak zmienić na TLS 1.1, który stał się nowym standardem. Jeśli protokół TLS 1.1 jest wyłączony na maszynie wirtualnej, połączenie zakończy się niepowodzeniem.

  1. W wystąpieniu cmd włącz protokół 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. Aby zapobiec zastępowaniu zmian przez zasady usługi AD, tymczasowo zatrzymaj aktualizację zasad grupy:

    REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
    
  3. Uruchom ponownie maszynę wirtualną, aby zmiany zaczęły obowiązywać. Jeśli problem zostanie rozwiązany, uruchom następujące polecenie, aby ponownie włączyć zasady grupy:

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

    Jeśli zmiana zostanie przywrócona, oznacza to, że w domenie firmowej istnieją zasady usługi Active Directory. Musisz zmienić te zasady, aby uniknąć ponownego wystąpienia tego problemu.

Naprawianie maszyny wirtualnej w trybie offline

Dołączanie dysku systemu operacyjnego do maszyny wirtualnej odzyskiwania

  1. Dołącz dysk systemu operacyjnego do maszyny wirtualnej odzyskiwania.
  2. Po dołączeniu dysku systemu operacyjnego do maszyny wirtualnej odzyskiwania upewnij się, że dysk jest oflagowany jako Online w konsoli zarządzania dyskami. Zwróć uwagę na literę dysku przypisaną do dołączonego dysku systemu operacyjnego.
  3. Uruchom połączenie pulpitu zdalnego z maszyną wirtualną odzyskiwania.

Włączanie dziennika zrzutu i konsoli szeregowej

Aby włączyć dziennik zrzutu i konsolę szeregową, uruchom następujący skrypt.

  1. Otwórz sesję wiersza polecenia z podwyższonym poziomem uprawnień (Uruchom jako administrator).

  2. Uruchom następujący skrypt:

    W tym skrypcie założono, że litera dysku przypisana do dołączonego dysku systemu operacyjnego to F. Zastąp tę literę dysku odpowiednią wartością dla maszyny wirtualnej.

    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
    

Resetowanie uprawnień dla folderu MachineKeys

  1. Otwórz sesję wiersza polecenia z podwyższonym poziomem uprawnień (Uruchom jako administrator).

  2. Uruchom następujący skrypt. W tym skrypcie założono, że litera dysku przypisana do dołączonego dysku systemu operacyjnego to F. Zastąp tę literę dysku odpowiednią wartością dla maszyny wirtualnej.

    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
    

Włączanie wszystkich obsługiwanych wersji protokołu TLS

  1. Otwórz sesję wiersza polecenia z podwyższonym poziomem uprawnień (Uruchom jako administrator) i uruchom następujące polecenia. Poniższy skrypt zakłada, że litera sterownika jest przypisana do dołączonego dysku systemu operacyjnego to F. Zastąp tę literę dysku odpowiednią wartością dla maszyny wirtualnej.

  2. Sprawdź, który protokół TLS jest włączony:

    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. Jeśli klucz nie istnieje lub jego wartość to 0, włącz protokół, uruchamiając następujące skrypty:

    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. Włącz 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. Odłącz dysk systemu operacyjnego i utwórz ponownie maszynę wirtualną, a następnie sprawdź, czy problem został rozwiązany.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.