我该如何解决使用 RDP 连接到 EC2 Windows 实例时出现的身份验证错误?
我在尝试使用远程桌面协议 (RDP) 登录 Amazon Elastic Compute Cloud(Amazon EC2)Windows 实例时收到身份验证错误。
解决方法
当您使用 RDP 登录 Amazon EC2 Windows 实例时,可能会收到以下身份验证错误:
- "An authentication error has occurred.The Local Security Authority cannot be contacted."
- "The remote computer that you are trying to connect to requires Network Level Authentication (NLA), but your Windows domain controller cannot be contacted to perform NLA.如果您是远程计算机的管理员,可以使用系统属性对话框的远程选项卡上的选项禁用 NLA。
这些错误可能会在以下场景中发生:
- 服务器上启用了网络层身份验证(NLA)。
- 当 RDP 登录时,您的域与加入此域的 EC2 实例之间的信任关系失败。
服务器上启用了 NLA
当实例由于域凭证未经过身份验证而失去与域控制器的连接时,会出现 NLA 错误。要解决此问题,使用 AWS Systems Manager AWSSupport-TroubleshootRDP 自动化文档修改实例设置或停用实例上的 NLA。
使用 AWSSupport-TroubleshootRDP 自动化文档,您可以修改实例上可能影响 RDP 连接的常用设置。
使用以下方法之一在无法访问的实例上停用 NLA:
- 配置 AWS Systems Manager 会话管理器。
- 运行 AWS-RunPowerShellScript 命令文档。
- 离线手动更改注册表。
注意: 更改 NLA 时必须更改注册表。在开始之前,从您的实例创建亚马逊机器映像(AMI)。这会在您更改注册表之前创建备份。
使用 Systems Manager 会话管理器停用 NLA
要使用会话管理器停用 NLA,完成以下步骤添加注册表项:
重要事项: 实例必须已安装 Systems Manager Agent(SSM Agent),并且必须处于联机状态。实例还必须具有授予会话管理器权限的 AWS Identity and Access Management(IAM)角色。有关更多信息,请参阅会话管理器先决条件。
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Fleet Manager。
- 选择要连接的托管实例。
- 在节点操作菜单中,选择启动终端会话、连接。您已使用会话管理器连接到实例。
- 在终端会话中运行以下命令:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v fAllowSecProtocolNegotiation /t REG_DWORD /d 0 /f
使用 AWS-RunPowerShellScript 命令文档停用 NLA
要使用 AWS:RunPowerShellScript 命令文档停用 NLA,完成以下步骤来添加注册表项:
重要事项: 实例必须已安装 SSM Agent 并且必须处于联机状态。实例还必须具有授予会话管理器权限的 IAM 角色。有关更多信息,请参阅会话管理器先决条件。
-
在导航窗格中,选择运行命令,然后选择运行一个命令。
-
为命令文档选择 AWS-RunPowerShellScript。
-
在命令参数处,输入以下命令:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0 /f reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v fAllowSecProtocolNegotiation /t REG_DWORD /d 0 /f
-
在目标选择处,选择手动选择实例,然后选择您的实例。
-
选择运行。
-
等待总体状态变为成功。两分钟后刷新页面。
-
重启实例。
-
使用 RDP 登录实例。
离线手动更改注册表
-
在与您停止的无法访问的实例所在的相同可用区内启动新实例。新实例将成为您的救援实例。
重要事项: 最佳做法是启动与无法访问的实例不同的 Windows 实例,以避免出现磁盘签名问题。
-
将分离的卷作为 /dev/xvdf 连接到救援实例。
-
使用 RDP 连接救援实例,然后在磁盘管理器中将刚才连接的卷联机。
-
在命令提示符中,键入 regedit.exe,然后按 Enter 打开注册表编辑器。
-
选择 HKEY_LOCAL_MACHINE,然后选择文件、加载 Hive。
-
导航到附加卷上的 Windows 文件夹,然后选择系统文件。默认路径是 D:\Windows\System32\config。
-
为系统文件命名。例如,badsys。
-
badsys 系统文件现在将出现在 HKEY_LOCAL_MACHINE 下。在 badsys 下,导航到 ControlSet001、控制、终端服务器、WinStations、RDP-Tcp。
-
双击 SecurityLayer,将值数据设置为 **0。**选择 UserAuthentication,将值数据设置为 0。然后,选择 AllowSecProtocolNegotiation,将值数据设置为 0。
-
向上滚动,选择 badsys、文件、卸载 Hive。
-
Hive 卸载后,打开磁盘管理器,将磁盘脱机。
-
将卷与救援实例分离,并将卷作为根卷 (/dev/sda1) 连接到无法访问的实例。
-
启动实例并测试 RDP。
在 RDP 登录期间,您的域与加入此域的 EC2 实例之间的信任关系会失败
尝试使用缓存的用户凭证登录到无法访问的实例。
先决条件
-
可以成功在 EC2 实例进行身份验证的本地账户。
-
(可选)至少有一个在实例与域控制器通信时已登录的域账户。要使域账户正常工作,必须将域账户凭证缓存在服务器中。
注意: 最佳做法是使用本地账户。
-
当域控制器不可用时,请确保将要缓存的先前登录次数设置至少设置为 1。必须完成此设置才能使用交互式登录。策略可以设置为默认值 10。默认情况下,策略未定义,您可以使用服务器的本地策略。
要使用缓存的用户凭证登录,请完成以下步骤:
- 打开 EC2 控制台,然后选择安全组。
- 在导航窗格中,选择安全组。
- 选择创建安全组。
- 添加安全组名称和描述。
- 在入站规则下,选择添加规则。
- 为类型选择 RDP。然后,提供您要使用 RDP 从其进行连接的源的信息。
- 在出站规则下,删除所有出站访问。
- 选择创建安全组。
- 在导航窗格中,选择实例,然后选择无法访问的实例。
- 选择操作、安全、更改安全组。删除所有现有的安全组,然后分配您刚才创建的安全组。
- 使用普通域账户使用 RDP 连接 EC2 实例。由于所有出站访问都被从 Amazon EC2 中删除,RDP 使用存储在服务器上的缓存证书。
注意: 最初会尝试对域控制器进行身份验证。但是,由于没有从 Amazon EC2 进行出站访问,身份验证最终会检查存储在服务器上的缓存凭证。然后将使用缓存的凭证重新尝试进行身份验证,登录将成功。登录后,您可以将安全组设置更改回原始状态,然后继续修复域中的所有问题。
其他故障排除
如果您仍然无法连接到实例,请参阅如何解决我的 Amazon EC2 Windows 实例的远程桌面连接问题?
相关信息
相关内容
- 已提问 4 个月前lg...
- AWS 官方已更新 2 个月前
- AWS 官方已更新 3 个月前