Si verifica un errore interno quando si prova a connettersi a una macchina virtuale di Azure tramite Desktop remoto
Si applica a: ✔️ macchine virtuali di Windows
Questo articolo descrive un errore che può verificarsi quando si tenta di connettersi a una macchina virtuale Windows in Microsoft Azure.
Nota
Questo articolo ti è stato utile? L'input è importante per noi. Usare il pulsante Commenti e suggerimenti in questa pagina per segnalare il funzionamento di questo articolo o il modo in cui è possibile migliorarlo.
Sintomi
Non è possibile connettersi a una macchina virtuale di Azure usando il protocollo RDP (Remote Desktop Protocol). La connessione si blocca nella sezione Configurazione remota oppure viene visualizzato il messaggio di errore seguente:
- Errore interno di RDP
- Si è verificato un errore interno
- Non è possibile connettere questo computer al computer remoto. Provare a eseguire di nuovo la connessione. Se il problema persiste, contattare il proprietario del computer remoto o l'amministratore di rete
Causa
Questo problema può verificarsi per i motivi seguenti:
- La macchina virtuale potrebbe essere stata attaccata.
- Non è possibile accedere alle chiavi di crittografia RSA locali.
- Il protocollo TLS è disabilitato.
- Il certificato è danneggiato o scaduto.
Soluzione
Per risolvere questo problema, completare la procedura descritta nelle sezioni seguenti. Prima di iniziare, creare uno snapshot del disco del sistema operativo della macchina virtuale interessata come backup. Per ulteriori informazioni, consultare Istantanea del disco.
Controllare la sicurezza RDP
Verificare prima di tutto se il gruppo di sicurezza di rete per la porta RDP 3389 non è protetto (aperto). Se non è protetto e mostra * come indirizzo IP di origine per l'ingresso, limitare la porta RDP all'indirizzo IP di un utente specifico e quindi testare l'accesso RDP. In caso di errore, completare i passaggi nella sezione successiva.
Usare il controllo seriale
Usare la console seriale o ripristinare la macchina virtuale offline collegando il disco del sistema operativo della macchina virtuale a una macchina virtuale di ripristino.
Per iniziare, connettersi alla console seriale e aprire un'istanza di PowerShell. Se la console seriale non è abilitata nella macchina virtuale, andare alla sezione Riparare la macchina virtuale in modalità offline.
Passaggio: 1 Verificare la porta RDP
In un'istanza di PowerShell usare NETSTAT per verificare se la porta 3389 viene usata da altre applicazioni:
Netstat -anob |more
Se Termservice.exe usa la porta 3389, andare al passaggio 2. Se un altro servizio o applicazione diverso da Termservice.exe usa la porta 3389, seguire questa procedura:
Arrestare il servizio per l'applicazione che usa il servizio 3389:
Stop-Service -Name <ServiceName> -Force
Avviare il servizio terminal:
Start-Service -Name Termservice
Se l'applicazione non può essere arrestata o se questo metodo non è applicabile all'utente, modificare la porta per RDP:
Modificare la porta:
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
Impostare il firewall per la nuova porta:
Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
Aggiornare il gruppo di sicurezza di rete per la nuova porta nella porta per RDP del portale di Azure.
Passaggio 2: Impostare le autorizzazioni corrette per il certificato autofirmato RDP
In un'istanza di PowerShell, eseguire i comandi seguenti uno alla volta per rinnovare il certificato autofirmato RDP:
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"
Se non è possibile rinnovare il certificato con questo metodo, provare a rinnovare il certificato autofirmato RDP in modalità remota:
Da una macchina virtuale che disponga di connettività alla macchina virtuale che presenta problemi, digitare mmc nella casella Eseguire per aprire Microsoft Management Console.
Nel menu File selezionare Aggiungi/Rimuovi snap-in, selezionare Certificati e quindi selezionare Aggiungi.
Selezionare Account computer, selezionare Altro computer e quindi aggiungere l'indirizzo IP della macchina virtuale che presenta problemi.
Passare alla cartella Remote Desktop\Certificates, fare clic con il pulsante destro del mouse sul certificato e quindi selezionare Elimina.
In un'istanza di PowerShell dalla Console seriale, riavviare il servizio di configurazione di Desktop remoto:
Stop-Service -Name "SessionEnv" Start-Service -Name "SessionEnv"
Reimpostare l'autorizzazione per la cartella 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
Riavviare la macchina virtuale e quindi tentare di avviare una connessione Desktop remoto alla macchina virtuale. Se l'errore persiste ancora, passare al passaggio successivo.
Passaggio 3: Abilitare tutte le versioni TLS supportate
Il client RDP usa TLS 1.0 come protocollo predefinito. Tuttavia, ciò può essere modificato in TLS 1.1, che è diventato il nuovo standard. Se TLS 1.1 è disabilitato nella macchina virtuale, la connessione avrà esito negativo.
In un'istanza CMD, abilitare il protocollo 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
Per impedire che i criteri AD sovrascrivano le modifiche, interrompere temporaneamente l'aggiornamento dei criteri di gruppo:
REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
Riavviare la macchina virtuale per applicare le modifiche. Se il problema viene risolto, eseguire il comando seguente per abilitare nuovamente i criteri di gruppo:
sc config gpsvc start= auto sc start gpsvc gpupdate /force
Se la modifica viene ripristinata, significa che è presente un criterio di Active Directory nel dominio aziendale. È necessario modificare tale criterio per evitare che questo problema si ripeta.
Riparare la macchina virtuale in modalità offline
Collegare il disco del sistema operativo a una macchina virtuale di ripristino
- Collegare il disco del sistema operativo a una macchina virtuale di ripristino.
- Dopo aver collegato il disco del sistema operativo alla macchina virtuale di ripristino, verificare che il disco sia contrassegnato come Online nella console di Gestione disco. Prendere nota della lettera di unità assegnata al disco del sistema operativo collegato.
- Avviare una connessione Desktop remoto alla macchina virtuale di ripristino.
Abilitare il registro dump e la console seriale
Per abilitare il registro di dump e la console seriale, eseguire il seguente script.
Aprire una sessione del prompt dei comandi con privilegi elevati (Esegui come amministratore).
Eseguire lo script seguente:
In questo script si presuppone che la lettera di unità assegnata al disco del sistema operativo collegato sia F. Sostituirla con il valore appropriato per la specifica macchina virtuale.
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
Reimpostare l'autorizzazione per la cartella MachineKeys
Aprire una sessione del prompt dei comandi con privilegi elevati (Esegui come amministratore).
Eseguire lo script seguente. In questo script si presuppone che la lettera di unità assegnata al disco del sistema operativo collegato sia F. Sostituirla con il valore appropriato per la specifica macchina virtuale.
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
Abilitare tutte le versioni TLS supportate
Aprire una sessione del prompt dei comandi con privilegi elevati (Esegui come amministratore) e quindi eseguire i comandi seguenti. Lo script seguente presuppone che la lettera di unità assegnata al disco del sistema operativo collegato sia F. Sostituirla con il valore appropriato per la specifica macchina virtuale.
Verificare quale protocollo TLS è abilitato:
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
Se la chiave non esiste o il relativo valore è 0, abilitare il protocollo eseguendo gli script seguenti:
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
Abilitare 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
Scollegare il disco del sistema operativo e ricreare la macchina virtuale, quindi controllare se il problema è risolto.
Contattaci per ricevere assistenza
In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.