0%

解決 Azure VM RDP "An internal error has occured" 問題

幾天前,我在Azure VM上的四台Windows Server 2016有三台在同一天忽然無法使用遠端桌面連線進入,接著隔天僅存的一台也無法遠端桌面連線進入了,而錯誤都顯示是”內部錯誤”(An internal error has occured),以下分享我的解決過程。

查詢發生原因

由於沒有辦法進入到該台伺服器中,所以我從Azure Portal的「執行命令」(Run Command)中的RunPowerShellScript來處理。

  1. 查詢系統紀錄檔是否有相關錯誤 (由於發生時間近,只抓出最新30筆紀錄)
    1
    Get-EventLog -LogName System -newest 30

在System log中看見Index 50564的Error是由TermService造成,TermService就是遠端桌面服務,因此進一步列出詳細錯誤訊息。

Windows Server 2008以前遠端桌面連線服務稱為TermService (Terminal Service)
Windows Server 2008以後稱為RDS (Remote Desktop Services)
(見Wikipedia)

  1. 找到Error Log後,針對該筆Event列出詳細的錯誤訊息
    1
    Get-EventLog -LogName System -Index 50564 | select -ExpandProperty message

從PowerShell的輸出中,發現在進行遠端桌面連線時,RD Session Host Server在創建一個新的自簽憑證時,因為權限問題發生Access is denied,因此推測問題發生在存放此自簽憑證的資料夾或檔案權限上,經過一些研究,只要讓遠端桌面服務找不到原始的 C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys 資料夾,就會創建一個新的MachineKeys資料夾及憑證,因此我使用這個方式讓系統幫我建立預設權限。

解決方法
  1. 透過Netstat查詢目前3389 port的使用情況

    1
    Netstat -anob | more
  2. 若當前3389 port正在運作,關閉占用3389 port的服務 (在我的例子中是Termservice)

    1
    Stop-Service -Name Termservice -Force
  3. 更改C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys資料夾名稱

    1
    Rename-Item C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys_original
  4. 重啟Termservice

    1
    Start-Service -Name Termservice
  5. 重新使用遠端桌面連線連至目的端