幾天前,我在Azure VM上的四台Windows Server 2016有三台在同一天忽然無法使用遠端桌面連線進入,接著隔天僅存的一台也無法遠端桌面連線進入了,而錯誤都顯示是”內部錯誤”(An internal error has occured),以下分享我的解決過程。
查詢發生原因
由於沒有辦法進入到該台伺服器中,所以我從Azure Portal的「執行命令」(Run Command)中的RunPowerShellScript來處理。
- 查詢系統紀錄檔是否有相關錯誤 (由於發生時間近,只抓出最新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)
- 找到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資料夾及憑證,因此我使用這個方式讓系統幫我建立預設權限。
解決方法
透過Netstat查詢目前3389 port的使用情況
1
Netstat -anob | more
若當前3389 port正在運作,關閉占用3389 port的服務 (在我的例子中是Termservice)
1
Stop-Service -Name Termservice -Force
更改C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys資料夾名稱
1
Rename-Item C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys C:\ProgramData\Microsoft\Crypto\RSA\Machinekeys_original
重啟Termservice
1
Start-Service -Name Termservice
重新使用遠端桌面連線連至目的端