Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
我该如何解决使用 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 实例之间的信任关系失败。
您可以使用 AWSSupport-TroubleshootRDP 运行手册,也可以手动排查错误。
解决方法
服务器上启用了 NLA
当实例由于域凭证未经过身份验证而失去与域控制器的连接时,会出现 NLA 错误。要解决此问题,请使用以下方法之一在无法访问的实例上停用 NLA:
- 运行 AWS Systems Manager AWSSupport-TroubleshootRDP 自动化以修改实例设置。
- 使用 Systems Manager 会话管理器或 aws:runPowerShellscript 命令。
- 离线手动更改注册表。
**注意:**更改 NLA 时必须更改注册表。在开始之前,从您的实例创建亚马逊机器映像(AMI)。这会在您更改注册表之前创建备份。
运行 AWSSupport-TroubleshootRDP 自动化
先决条件:
- 查看 RDP 设置、RDP 服务和 Windows 防火墙配置文件的更改。
- 确保目标 EC2 实例具有 AWS Identity and Access Management (IAM) 实例配置文件角色并附有 AmazonSSMManagedInstanceCore Amazon 托管式策略。
- 验证您的当前 IAM 用户或角色是否具有所需的权限。有关详细信息,请参阅 AWSSupport-TroubleshootRDP 的“所需的 IAM 权限”部分。
注意: 如果您选择 AllowOffline 选项,则本运行手册将调用 AWSSupport-ExecuteEC2Rescue 运行手册来执行离线修复。要启动运行手册,您必须附加 AmazonSSMAutomationRole IAM 托管式策略。有关详细信息,请参阅 AWSSupport-StartEC2RescueWorkflow。
要运行 Systems Manager 运行手册,请完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Documents(文档)。
- 在搜索栏中,输入 AWSSupport-TroubleshootRDP。
- 选择 AWSSupport-TroubleshootRDP 文档。
- 选择 Execute automation(执行自动化)。
- 选择 Execute(执行)。
要在自动化完成后查查看详细结果,请查看 Outputs(输出)部分。
使用 Systems Manager 会话管理器
重要事项: 实例必须已安装 Systems Manager Agent (SSM Agent),并且必须处于联机状态。实例还必须具有授予会话管理器权限的 IAM 角色。有关详细信息,请参阅满足会话管理器先决条件。
要使用会话管理器添加注册表项并停用 NLA,请完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Fleet Manager。
- 选择要连接的托管实例。
- 在 Node actions(节点操作)菜单中,选择 Start terminal session(启动终端会话)。
- 在终端会话中运行以下命令:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /freg 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 命令
**重要事项:**实例必须已安装 SSM Agent 并且必须处于联机状态。实例还必须具有授予会话管理器权限的 IAM 角色。有关详细信息,请参阅满足会话管理器先决条件。
要使用 aws:runPowerShellscript 命令文档添加注册表项并停用 NLA,请完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Run Command(运行命令),然后选择 Run a Command(运行命令)。
对于 Command document(命令文档),选择 AWS-RunPowerShellScript。
对于 Command parameters(命令参数),输入以下命令:
在目标选择处,选择手动选择实例,然后选择您的实例。reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v SecurityLayer /t REG_DWORD /d 0 /freg 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 - 选择运行。
- 等待 Overall status(总体状态)变为 Success(成功)。2 分钟后刷新页面。
- 重启实例。
- 使用 RDP 登录实例。
离线手动更改注册表
完成以下步骤:
-
在与您停止的无法访问的实例所在的相同可用区内启动新实例。该新实例将成为您的救援实例。
**重要事项:**要避免出现磁盘签名问题,最佳做法是启动与无法访问的实例不同的 Windows 实例。
-
将分离的卷作为 /dev/xvdf 连接到救援实例。
-
使用 RDP 连接救援实例,然后在磁盘管理器中将刚才连接的卷联机。
-
在命令提示符中,键入 regedit.exe,然后按 Enter 打开注册表编辑器。
-
依次选择 HKEY_LOCAL_MACHINE、File 和 Load Hive。
-
转到附加卷上的 Windows 文件夹,然后选择 SYSTEM 文件。默认路径是 D:\Windows\System32\config。
-
为系统文件命名。例如,badsys。
-
badsys 系统文件现在将出现在 HKEY_LOCAL_MACHINE 下。在 badsys 下,导航到 ControlSet001、Control、Terminal Server、WinStations、RDP-Tcp。
-
双击 SecurityLayer,然后将值数据设置为 0。
选择 UserAuthentication,将值数据设置为 0。
选择 fAllowSecProtocolNegotiation,然后将值数据设置为 0。 -
依次选择 badsys、File 和 Unload Hive。
-
Hive 卸载后,打开磁盘管理器,将磁盘脱机。
-
将卷与救援实例分离,并将卷作为根卷 (/dev/sda1) 连接到无法访问的实例。
-
启动实例,然后测试 RDP。
在 RDP 登录期间,信任关系失败
使用缓存的用户凭证尝试登录到无法访问的实例。
先决条件:
- 可以成功在 EC2 实例进行身份验证的本地账户。
- (可选)至少有一个在实例与域控制器通信时已登录的域账户。要使域账户正常工作,必须将域账户凭证缓存在服务器中。
注意: 最佳做法是使用本地账户。 - 当域控制器不可用时,请确保将要缓存的先前登录次数设置至少设置为 1。必须这样做才能使用交互式登录。您可以将策略设置为默认值 10。默认情况下,策略未定义,您可以使用服务器的本地策略。
要使用缓存的用户凭证登录,请完成以下步骤:
- 打开 Amazon EC2 控制台。
- 在导航窗格中,选择 Security Groups(安全组)。
- 选择创建安全组。
- 添加安全组名称和描述。
- 在 Inbound rules(入站规则)下,选择 Add rule(添加规则)。
对于 Type(类型),选择 RDP。然后,输入您要使用 RDP 从其进行连接的源的信息。 - 在 Outbound rules(出站规则)下,删除所有出站访问。
- 选择 Create security group(创建安全组)。
- 在导航窗格中,选择 Instances(实例),然后选择无法访问的实例。
- 依次选择 Actions(操作)、Security(安全)和 Change security groups(更改安全组)。删除现有的安全组,然后分配您刚才创建的安全组。
- 使用普通域账户使用 RDP 连接 EC2 实例。由于您已从 Amazon EC2 中移除出站访问权限,RDP 使用存储在服务器上的缓存证书。
**注意:**最初尝试通过域控制器进行身份验证。由于没有从 Amazon EC2 的出站访问权限,身份验证最终会检查存储在服务器上的缓存凭证。然后将使用缓存的凭证重新尝试进行身份验证,登录将成功。登录后,您可以将安全组设置更改回原始状态。然后,继续修复您的域的任何问题。
其他故障排除
如果您仍然无法连接到实例,请参阅如何解决我的 EC2 Windows 实例的 RDP 连接问题?
相关信息
相关内容
- 已提问 3 年前

