依事件標識碼針對 Azure VM RDP 連線問題進行疑難解答

本文說明如何使用事件標識碼來疑難解答導致遠端桌面通訊協定 (RDP) 連線到 Azure 虛擬機 (VM) 的問題。

徵狀

您嘗試使用遠端桌面通訊協定 (RDP) 工作階段來連線到 Azure VM。 輸入認證之後,聯機會失敗,而且您會收到下列錯誤訊息:

此電腦無法連線遠端電腦。 如果問題持續發生,請再次嘗試連線,請連絡遠端電腦的擁有者或您的網路管理員。

若要針對此問題進行疑難解答,請檢閱 VM 上的事件記錄,然後參閱下列案例。

進行疑難解答之前

建立備份快照集

若要建立備份快照集,請遵循建立磁 碟快照中的步驟。

從遠端連線到 VM

若要從遠端連線到 VM,請使用 如何使用遠端工具來針對 Azure VM 問題進行疑難解答中的其中一種方法。

案例 1

事件記錄

在 CMD 實例中,執行下列命令來檢查事件 1058 或事件 1057 是否在過去 24 小時內記錄在系統記錄檔中:

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-TerminalServices-RemoteConnectionManager'] and EventID=1058 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Microsoft-Windows-TerminalServices-RemoteConnectionManager'] and EventID=1057 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more

記錄檔名稱: 系統
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
Date:time
事件標識碼: 1058
工作類別: 沒有
水準: 錯誤
關鍵 字: 經典
使用者: N/A
Computer:computer
描述: RD 會話主機伺服器無法取代在 TLS 連線上用於 RD 工作階段主機伺服器驗證的過期自我簽署憑證。 相關的狀態代碼為「存取遭拒」。

記錄檔名稱: 系統
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
Date:time
事件標識碼: 1058
工作類別: 沒有
水準: 錯誤
關鍵 字: 經典
使用者: N/A
Computer:computer
描述: RD 會話主機伺服器無法建立新的自我簽署憑證,以用於 TLS 連線上的 RD 工作階段主機伺服器驗證,相關的狀態代碼已存在。

記錄檔名稱: 系統
源: Microsoft-Windows-TerminalServices-RemoteConnectionManager
Date:time
事件標識碼: 1057
工作類別: 沒有
水準: 錯誤
關鍵 字: 經典
使用者: N/A
Computer:computer
描述: RD 會話主機伺服器無法建立新的自我簽署憑證,以用於 TLS 連線上的 RD 工作階段主機伺服器驗證。 相關的狀態代碼為 Keyset 不存在

您也可以執行下列命令來檢查 SCHANNEL 錯誤事件 36872 和 36870:

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36870 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36872 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more

記錄檔名稱: 系統
源: 安全通道
日期:
事件標識碼: 36870
工作類別: 沒有
水準: 錯誤
關鍵 字:
使用者: 系統
Computer:computer
描述: 嘗試存取 TLS 伺服器認證私鑰時發生嚴重錯誤。 從密碼編譯模組傳回的錯誤碼0x8009030D。
內部錯誤狀態為 10001。

原因

發生此問題的原因是無法存取 VM 上 MachineKeys 資料夾中的本機 RSA 加密金鑰。 此問題可能會因為下列其中一個原因而發生:

  1. Machinekeys 資料夾或 RSA 檔案的許可權設定錯誤。

  2. RSA 金鑰損毀或遺失。

解決方案

若要針對此問題進行疑難解答,您必須使用這些步驟來設定 RDP 憑證的正確許可權。

授與 MachineKeys 資料夾的許可權

  1. 使用下列內容建立文稿:

    remove-module psreadline 
    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
    
  2. 執行此腳本以重設 MachineKey 資料夾的許可權,並將 RSA 檔案重設為預設值。

  3. 再次嘗試存取 VM。

執行文稿之後,您可以檢查下列發生許可權問題的檔案:

  • c:\temp\BeforeScript_permissions.txt
  • c:\temp\AfterScript_permissions.txt

更新 RDP 自我簽署憑證

如果問題持續發生,請執行下列腳本,以確定 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"

如果您無法更新憑證,請遵循下列步驟嘗試刪除憑證:

  1. 在相同 VNET 的另一部 VM 上,開啟 [ 執行] 方塊,輸入 mmc,然後按 [確定]

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

  3. 在 [ 可用的嵌入式管理單元 ] 列表中,選取 [ 憑證],然後選取 [ 新增]

  4. 選取 [計算機帳戶],然後選取 [ 下一步]

  5. 取 [另一部計算機],然後新增有問題的 VM IP 位址。

    注意事項

    請嘗試使用內部網路以避免使用虛擬IP位址。

  6. 取 [完成],然後選取 [ 確定]

    [選取計算機] 對話框中 [另一部計算機] 選項的螢幕快照。

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

  8. 重新啟動遠端桌面設定服務:

    net stop SessionEnv
    net start SessionEnv
    

    注意事項

    此時,如果您從 mmc 重新整理存放區,憑證就會重新出現。

再次嘗試使用 RDP 存取 VM。

更新 TLS/SSL 憑證

如果您將 VM 設定為使用 TLS/SSL 憑證,請執行下列命令以取得指紋。 然後檢查它是否與憑證的指紋相同:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash

如果不是,請變更指紋:

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash /t REG_BINARY /d <CERTIFICATE THUMBPRINT>

您也可以嘗試刪除金鑰,讓 RDP 使用 RDP 的自我簽署憑證:

reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SSLCertificateSHA1Hash

案例 2

事件記錄檔

在 CMD 實例中,執行下列命令來檢查 SCHANNEL 錯誤事件 36871 是否在過去 24 小時內記錄在系統記錄檔中:

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name='Schannel'] and EventID=36871 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more

記錄檔名稱: 系統
源: 安全通道
日期:
事件標識碼: 36871
工作類別: 沒有
水準: 錯誤
關鍵 字:
使用者: 系統
Computer:computer
描述: 建立 TLS 伺服器認證時發生嚴重錯誤。 內部錯誤狀態為 10013。

原因

此問題是由安全策略所造成。 停用 1.0) 等舊版 TLS (時,RDP 存取會失敗。

解決方案

RDP 使用 TLS 1.0 作為預設通訊協定。 不過,通訊協定可能會變更為 TLS 1.1,這是新的標準。

若要針對此問題進行疑難解答,請參閱針對 使用 RDP 連線到 Azure VM 時的驗證錯誤進行疑難解答

案例 3

如果您已在 VM 上安裝 遠端桌面連線代理人 角色,請檢查過去 24 小時內是否有事件 2056 或事件 1296。 在 CMD 實例中,執行下列命令:

wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name=' Microsoft-Windows-TerminalServices-SessionBroker '] and EventID=2056 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more
wevtutil qe system /c:1 /f:text /q:"Event[System[Provider[@Name=' Microsoft-Windows-TerminalServices-SessionBroker-Client '] and EventID=1296 and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | more

記錄檔名稱: Microsoft-Windows-TerminalServices-SessionBroker/Operational
源: Microsoft-Windows-TerminalServices-SessionBroker
Date:time
事件標識碼: 2056
工作類別: (109)
水準: 錯誤
關鍵 字:
使用者: 網路服務
Computer:computer fqdn
描述: 找不到來自來源 Microsoft-Windows-TerminalServices-SessionBroker 的事件識別碼 2056 描述。 引發此事件的元件未安裝在本機計算機上,或安裝已損毀。 您可以在本機電腦上安裝或修復元件。
如果事件源自於另一部計算機,則顯示信息必須與 事件一起儲存。
事件隨附下列資訊:
NULL
NULL
登入資料庫失敗。

記錄檔名稱: Microsoft-Windows-TerminalServices-SessionBroker-Client/Operational
源: Microsoft-Windows-TerminalServices-SessionBroker-Client
Date:time
事件標識碼: 1296
工作類別: (104)
水準: 錯誤
關鍵 字:
使用者: 網路服務
Computer:computer fqdn
描述: 找不到來自來源 Microsoft-Windows-TerminalServices-SessionBroker-Client 的事件標識碼 1296 描述。 引發此事件的元件未安裝在本機計算機上,或安裝已損毀。 您可以在本機電腦上安裝或修復元件。 如果事件源自於另一部計算機,則顯示信息必須與 事件一起儲存。 事件隨附下列資訊:
text
text
遠端桌面連線代理人尚未準備好進行 RPC 通訊。

原因

發生此問題的原因是遠端桌面連線代理人伺服器的主機名已變更,這不是支持的變更。

主機名在 Windows 內部資料庫 上具有專案和相依性,遠端桌面服務伺服器陣列需要此專案和相依性才能運作。 在已建置伺服器陣列之後變更主機名會造成許多錯誤,而且可能會導致訊息代理程式伺服器停止運作。

解決方案

若要修正此問題,必須重新安裝遠端桌面連線代理人角色和 Windows 內部資料庫。

後續步驟

安全通道事件

安全通道 SSP 技術概觀

RDP 失敗,事件標識碼為 1058 & 具有遠端桌面會話主機憑證的事件 36870 & SSL 通訊

域控制器上的安全通道 36872 或安全通道 36870

事件標識碼 1058 - 遠端桌面服務驗證和加密

與我們連絡,以取得說明

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