嘗試透過遠端桌面連線至 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 埠
在 PowerShell 實例中 ,使用 NETSTAT 檢查其他應用程式是否使用埠 3389:
Netstat -anob |more
如果Termservice.exe使用 3389 埠,請移至步驟 2。 如果Termservice.exe以外的其他服務或應用程式使用 3389 埠,請遵循下列步驟:
停止使用 3389 服務之應用程式的服務:
Stop-Service -Name <ServiceName> -Force
啟動終端機服務:
Start-Service -Name Termservice
如果無法停止應用程式,或此方法不適用於您,請變更 RDP 的埠:
變更連接埠:
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
設定新埠的防火牆:
Set-NetFirewallRule -Name "RemoteDesktop-UserMode-In-TCP" -LocalPort <NEW PORT (decimal)>
更新 Azure 入口網站 RDP 連接埠中新埠的網路安全組。
步驟 2:在 RDP 自我簽署憑證上設定正確的許可權
在 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"
如果您無法使用此方法更新憑證,請嘗試從遠端更新 RDP 自我簽署憑證:
從連線到發生問題之 VM 的工作 VM 中,於 [執行] 方塊中輸入 mmc 以開啟 Microsoft 管理控制台。
在 [ 檔案] 功能表上,選取 [新增/移除嵌入式管理單元],選取 [憑證],然後選取 [ 新增]。
選取 [計算機帳戶],選取 [另一部計算機],然後新增問題 VM 的IP 位址。
移至 [遠端桌面\憑證 ] 資料夾,以滑鼠右鍵按下憑證,然後選取 [ 刪除]。
在序列主控台的 PowerShell 實例中,重新啟動遠端桌面組態服務:
Stop-Service -Name "SessionEnv" Start-Service -Name "SessionEnv"
重設 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
重新啟動 VM,然後嘗試啟動與 VM 的遠端桌面連線。 如果錯誤仍然發生,請移至下一個步驟。
步驟 3:啟用所有支援的 TLS 版本
RDP 用戶端會使用 TLS 1.0 作為預設通訊協定。 不過,這可以變更為 TLS 1.1,而 TLS 1.1 已成為新的標準。 如果 VM 上停用 TLS 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
若要防止 AD 原則覆寫變更,請暫時停止組策略更新:
REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f
重新啟動 VM,讓變更生效。 如果問題已解決,請執行下列命令以重新啟用組策略:
sc config gpsvc start= auto sc start gpsvc gpupdate /force
如果變更已還原,表示您的公司網域中有 Active Directory 原則。 您必須變更該原則,以避免此問題再次發生。
離線修復 VM
將 OS 磁碟連結至復原 VM
- 將 OS 磁碟連結至復原 VM。
- 將OS磁碟連結至復原 VM 之後,請確定磁碟在磁碟管理控制台中標示為 [在線 ]。 請注意指派給連結 OS 磁碟的驅動器號。
- 啟動與復原 VM 的遠端桌面連線。
啟用傾印記錄和序列主控台
若要啟用傾印記錄和序列主控台,請執行下列腳本。
開啟提升許可權的命令提示字元會話(以系統管理員身分執行)。
執行下列指令碼:
在此腳本中,我們假設指派給連結 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 資料夾的許可權
開啟提升許可權的命令提示字元會話(以系統管理員身分執行)。
執行下列指令碼。 在此腳本中,我們假設指派給連結 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 版本
開啟提升許可權的命令提示字元會話(以系統管理員身分執行),然後執行下列命令。 下列文稿假設驅動程式信件指派給連結的 OS 磁碟為 F。請將此驅動器號取代為您的 VM 的適當值。
檢查已啟用 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
如果機碼不存在,或其值為 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
開啟 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
中斷連結 OS 磁碟並重新建立 VM,然後檢查問題是否已解決。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。