共用方式為


嘗試透過遠端桌面連線至 Azure VM 時發生內部錯誤

適用於:✔️ Windows VM

本文說明當您嘗試連線到 azure Microsoft 虛擬機時,可能會遇到的錯誤。

注意

本篇文章實用嗎? 您的輸入對我們很重要。 請使用此頁面上的 [ 意見反應 ] 按鈕,讓我們知道這篇文章為您運作得有多好,或我們如何加以改善。

徵兆

您無法使用遠端桌面通訊協定 (RDP) 連線到 Azure VM。 線上停滯在 [ 設定遠端 ] 區段上,或您收到下列錯誤訊息:

  • RDP 內部錯誤
  • 發生內部錯誤
  • 此電腦無法連線到遠端電腦。 請嘗試重新連線。 如果問題持續發生,請連絡遠端電腦或網路管理員的擁有者

原因

此問題可能會因為下列原因而發生:

  • 虛擬機可能遭到攻擊。
  • 無法存取本機 RSA 加密金鑰。
  • TLS 通訊協定已停用。
  • 憑證已損毀或過期。

解決方案

若要針對此問題進行疑難解答,請完成下列各節中的步驟。 開始之前,請擷取受影響 VM OS 磁碟的快照集作為備份。 如需詳細資訊,請參閱 快照集磁碟

檢查 RDP 安全性

首先,檢查 RDP 連接埠 3389 的網路安全組是否不安全(開啟)。 如果不安全,且會顯示 * 作為輸入的來源IP位址,請將 RDP 埠限製為指定的使用者的IP位址,然後測試 RDP 存取。 如果失敗,請完成下一節中的步驟。

使用序列控件

將 VM 的 OS 磁碟連結至復原 VM,以使用序列主控台或 離線 修復 VM。

若要開始,請連線到 序列控制台並開啟PowerShell實例。 如果您的 VM 上未啟用序列主控台,請移至 [離線 修復 VM] 區段。

步驟: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. 更新 Azure 入口網站 RDP 連接埠中新埠的網路安全組。

步驟 2:在 RDP 自我簽署憑證上設定正確的許可權

  1. 在 PowerShell 實例中,逐一執行下列命令來更新 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"
    
  2. 如果您無法使用此方法更新憑證,請嘗試從遠端更新 RDP 自我簽署憑證:

    1. 從連線到發生問題之 VM 的工作 VM 中,於 [執行] 方塊中輸入 mmc 以開啟 Microsoft 管理控制台。

    2. 在 [ 檔案] 功能表上,選取 [新增/移除嵌入式管理單元],選取 [憑證],然後選取 [ 新增]。

    3. 選取 [計算機帳戶],選取 [另一部計算機],然後新增問題 VM 的IP 位址。

    4. 移至 [遠端桌面\憑證 ] 資料夾,以滑鼠右鍵按下憑證,然後選取 [ 刪除]。

    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. 重新啟動 VM,然後嘗試啟動與 VM 的遠端桌面連線。 如果錯誤仍然發生,請移至下一個步驟。

步驟 3:啟用所有支援的 TLS 版本

RDP 用戶端會使用 TLS 1.0 作為預設通訊協定。 不過,這可以變更為 TLS 1.1,而 TLS 1.1 已成為新的標準。 如果 VM 上停用 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. 重新啟動 VM,讓變更生效。 如果問題已解決,請執行下列命令以重新啟用組策略:

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

    如果變更已還原,表示您的公司網域中有 Active Directory 原則。 您必須變更該原則,以避免此問題再次發生。

離線修復 VM

將 OS 磁碟連結至復原 VM

  1. 將 OS 磁碟連結至復原 VM
  2. 將OS磁碟連結至復原 VM 之後,請確定磁碟在磁碟管理控制台中標示為 [在線 ]。 請注意指派給連結 OS 磁碟的驅動器號。
  3. 啟動與復原 VM 的遠端桌面連線。

啟用傾印記錄和序列主控台

若要啟用傾印記錄和序列主控台,請執行下列腳本。

  1. 開啟提升許可權的命令提示字元會話(以系統管理員身分執行)。

  2. 執行下列指令碼:

    在此腳本中,我們假設指派給連結 OS 磁碟的驅動器號為 F。請將此驅動器號取代為您的 VM 的適當值。

    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. 執行下列指令碼。 在此腳本中,我們假設指派給連結 OS 磁碟的驅動器號為 F。請將此驅動器號取代為您的 VM 的適當值。

    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
    

啟用所有支援的 TLS 版本

  1. 開啟提升許可權的命令提示字元會話(以系統管理員身分執行),然後執行下列命令。 下列文稿假設驅動程式信件指派給連結的 OS 磁碟為 F。請將此驅動器號取代為您的 VM 的適當值。

  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. 中斷連結 OS 磁碟並重新建立 VM,然後檢查問題是否已解決。

與我們連絡,以取得說明

如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。