針對使用 RDP 連線到 Azure VM 時的驗證錯誤進行疑難解答

本文可協助您針對使用遠端桌面通訊協定 (RDP) 連線連線到 Azure 虛擬機 (VM) 時所發生的驗證錯誤進行疑難解答。

注意事項

本文是否有幫助? 您的輸入對我們很重要。 請使用此頁面上的 [ 意見反應 ] 按鈕,讓我們知道本文如何為您運作,或我們如何加以改善。

徵狀

您會擷取 Azure VM 的螢幕快照,其中顯示歡迎畫面,並指出操作系統正在執行。 不過,當您嘗試使用遠端桌面連線連線到 VM 時,您會收到下列其中一個錯誤訊息:

  • 發生驗證錯誤。 無法連絡本地安全機構。
  • 您嘗試連線的遠端電腦需要網路層級驗證 (NLA) ,但無法連絡您的 Windows 域控制器來執行 NLA。 如果您是遠端電腦上的系統管理員,您可以使用 [系統屬性] 對話方塊之 [遠端] 索引卷標上的選項來停用 NLA。
  • 此電腦無法連線遠端電腦。 如果問題持續發生,請再次嘗試連線,請連絡遠端電腦的擁有者或您的網路管理員。

原因

NLA 可能會封鎖對 VM 的 RDP 存取有幾個原因:

  • VM 無法與域控制器通訊 (DC) 。 此問題可能會防止 RDP 會話使用網域認證來存取 VM。 不過,您仍然可以使用本機系統管理員認證登入。 此問題可能會在下列情況下發生:
    • 此 VM 與 DC 之間的 Active Directory 安全性通道已中斷。
    • VM 有舊的帳戶密碼複本,且 DC 有較新的複本。
    • 此 VM 所連線的 DC 狀況不良。
  • VM 的加密層級高於用戶端計算機所使用的加密層級。
  • VM 上的 TLS 1.0、1.1 或 1.2 (伺服器) 通訊協定已停用。 VM 已設定為使用網域認證停用登入,且 LSA) 的本地安全 (單位設定不正確。
  • VM 已設定為只接受符合 FIPS) 標準美國聯邦資訊處理標準 (演演算法連線。 這通常是使用 Active Directory 原則來完成。 這是很少見的設定,但只能針對遠端桌面連線強制執行 FIPS。

進行疑難解答之前

建立備份快照集

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

從遠端連線到 VM

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

組策略客戶端服務

如果這是已加入網域的 VM,請先停止 群組原則 客戶端服務,以防止任何 Active Directory 原則覆寫變更。 若要執行此動作,請執行下列命令:

REM Disable the member server to retrieve the latest GPO from the domain upon start
REG add "HKLM\SYSTEM\CurrentControlSet\Services\gpsvc" /v Start /t REG_DWORD /d 4 /f

修正問題之後,還原此 VM 連絡網域以從網域擷取最新 GPO 的能力。 若要執行這項操作,請執行下列命令:

sc config gpsvc start= auto
sc start gpsvc

gpupdate /force

如果變更已還原,表示 Active Directory 原則造成問題。

因應措施

作為連線到 VM 並解決原因的因應措施,您可以暫時停用 NLA。 若要停用 NLA,請使用下列命令,或使用執行DisableNLA命令中的腳本。

REM Disable the Network Level Authentication
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0

然後,重新啟動 VM,然後繼續進行疑難解答一節。

解決此問題之後,請執行下列命令,然後重新啟動 VM,以重新啟用 NLA:

REG add "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v disabledomaincreds /t REG_DWORD /d 0 /f
REG add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 1 /f

疑難排解

  1. 針對已加入網域的 VM 進行疑難解答。
  2. 針對獨立 VM 進行疑難解答。

針對已加入網域的 VM 進行疑難解答

若要針對此問題進行疑難解答:

  1. 檢查 VM 是否可以連線到 DC。
  2. 檢查DC的健康情況。

注意事項

若要測試DC健康情況,您可以使用位於相同 VNET、子網和使用相同登入伺服器的另一部 VM。

根據從遠端連線至 VM 一節中的步驟,使用 序列主控台、遠端 CMD 或遠端 PowerShell 連線到有問題的 VM

  1. 判斷 VM 嘗試連線的 DC。在控制台中執行下列命令:

    set | find /i "LOGONSERVER"
    
  2. 測試 VM 與 DC 之間安全通道的健康情況。 若要這樣做,請在提升許可權的 Test-ComputerSecureChannel PowerShell 實例中執行 命令。 此命令會傳回 True 或 False,指出安全通道是否正在運作:

    Test-ComputerSecureChannel -verbose
    

    如果通道中斷,請執行下列命令來修復它:

    Test-ComputerSecureChannel -repair
    
  3. 請確定 VM 和 DC 上已更新 Active Directory 中的電腦帳戶密碼:

    Reset-ComputerMachinePassword -Server "<COMPUTERNAME>" -Credential <DOMAIN CREDENTIAL WITH DOMAIN ADMIN LEVEL>
    

如果 DC 與 VM 之間的通訊良好,但 DC 的狀況不足以開啟 RDP 工作階段,您可以嘗試重新啟動 DC。

如果上述命令未修正網域的通訊問題,您可以將此 VM 重新加入網域。 如果要執行這項操作,請依照下列步驟執行:

  1. 使用下列內容建立名為 Unjoin.ps1 的腳稿,然後在 Azure 入口網站 上將腳本部署為自定義腳本擴充功能:

    cmd /c "netdom remove <<MachineName>> /domain:<<DomainName>> /userD:<<DomainAdminhere>> /passwordD:<<PasswordHere>> /reboot:10 /Force"
    

    此腳本會強制從網域移除 VM,並在 10 秒後重新啟動 VM。 然後,您必須清除網域端的 Computer 物件。

  2. 清除完成之後,請將此 VM 重新加入網域。 若要這樣做,請使用下列內容建立名為 JoinDomain.ps1 的腳本,然後在 Azure 入口網站 上將腳本部署為自定義腳本擴充功能:

    cmd /c "netdom join <<MachineName>> /domain:<<DomainName>> /userD:<<DomainAdminhere>> /passwordD:<<PasswordHere>> /reboot:10"
    

注意事項

這會使用指定的認證加入網域上的 VM。

如果 Active Directory 通道狀況良好、計算機密碼已更新,且域控制器如預期般運作,請嘗試下列步驟。

如果問題持續發生,請檢查網域認證是否已停用。 若要這樣做,請開啟提升許可權的 [命令提示字元] 視窗,然後執行下列命令來判斷 VM 是否設定為停用網域帳戶以登入 VM:

REG query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa" /v disabledomaincreds

如果金鑰設定為 1,這表示伺服器已設定為不允許網域認證。 將此金鑰變更為 0。

針對獨立 VM 進行疑難解答

檢查 MinEncryptionLevel

在 CMD 實例中,執行下列命令來查詢 MinEncryptionLevel 登錄值:

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

根據登錄值,遵循下列步驟:

  • 4 (FIPS) :檢查 FIP 相容的演算法連線。

  • 3 (128 位加密) :執行下列命令,將嚴重性設定為 2:

    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 2 /f
    
  • 2 (用戶端) 所指定的最高加密:您可以執行下列命令,嘗試將加密設定為最小值 1

    reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 1 /f
    

重新啟動 VM,讓登錄的變更生效。

TLS 版本

根據系統,RDP 會使用 TLS 1.0、1.1 或 1.2 (伺服器) 通訊協定。 若要查詢如何在 VM 上設定這些通訊協定,請開啟 CMD 實例,然後執行下列命令:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled

如果傳回的值不是全部 1,這表示通訊協定已停用。 若要啟用這些通訊協定,請執行下列命令:

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

針對其他通訊協定版本,您可以執行下列命令:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS x.x\Server" /v Enabled
reg query "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS x.x\Server" /v Enabled

注意事項

從 SCHANNEL 錯誤的客體 OS 記錄檔取得 SSH/TLS 版本 x.x。

檢查 FIP 相容演演算法連線

您可以強制執行遠端桌面,只使用符合 FIPs 規範的演算法連線。 這可以使用登錄機碼來設定。 若要這樣做,請開啟提升許可權的 [命令提示字元] 視窗,然後查詢下列索引鍵:

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy" /v Enabled

如果命令傳回 1,請將登錄值變更為 0

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy" /v Enabled /t REG_DWORD /d 0

檢查 VM 上目前的 MinEncryptionLevel

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

如果命令傳回 4,請將登錄值變更為 2

reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v MinEncryptionLevel /t REG_DWORD /d 2

重新啟動 VM,讓登錄的變更生效。

後續步驟

與我們連絡,以取得說明

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