我想解决使用 Amazon Elastic Compute Cloud (Amazon EC2) Instance Connect 连接到 EC2 Linux 实例时出现的问题。
简短描述
以下是使用 EC2 Instance Connect 连接到实例时可能会收到错误的常见原因:
- EC2 Instance Connect 不支持操作系统 (OS) 发行版。
- 实例上未安装 EC2 Instance Connect 软件包。
- AWS Identity and Access Management (IAM) 策略或权限缺失或不正确。
- 与实例关联的安全组没有列出 EC2 Instance Connect 服务 IP 地址。
- 网络访问权限或配置不正确。
要确定连接失败的原因,您可以使用 AWSSupport-TroubleshootEC2InstanceConnect AWS Systems Manager 自动化运行手册。有关自动化工作流的信息,请参阅 AWS Support 自动化工作流 (SAW) 和设置自动化。
您也可以手动对 EC2 实例进行故障排除。
解决方法
**先决条件:**如果您的实例没有公有 IP 地址,则您必须与您的虚拟私有云 (VPC) 建立私有网络连接。要与您的 VPC 建立私有网络连接,请使用 AWS Direct Connect、AWS Site-to-Site VPN 或 VPC 对等连接。如果您的实例没有公有 IPv4 地址,并且您的 VPC 没有私有网络连接配置,则请使用 EC2 Instance Connect 端点。
**注意:**如果您打开了适用于 Linux 实例的 EC2 Serial Console,则请使用该串行控制台对基于 Nitro 的实例类型进行故障排除。如果您无法访问您的实例,也没有配置对串行控制台的访问权限,则请参阅配置对 EC2 Serial Console 的访问。
使用运行手册对您的 EC2 实例进行故障排除
在启动 AWSSupport-TroubleshootEC2InstanceConnect 运行手册之前,请确保您的 IAM 用户或角色拥有所需的权限。有关详细信息,请参阅 AWSSupport-TroubleshootEC2InstanceConnect 的“所需的 IAM 权限”部分。
要使用运行手册,请完成以下步骤:
- 打开 Systems Manager 控制台。
- 在导航窗格中,选择 Shared Resources(共享资源),然后选择 Documents(文档)。
- 选择 Automation documents(Automation 文档)。
- 在搜索字段中,输入 AWSSupport-TroubleshootEC2InstanceConnect,然后选择文档。
- 选择 Execute automation(执行自动化)。
- 为输入参数输入以下值:
对于 InstanceId,输入您无法连接的实例的 ID。
(可选)对于 AutomationAssumeRole,输入 IAM 角色的 ARN,该角色允许 Systems Manager Automation 代表您执行操作。如果您不指定角色,Systems Manager Automation 将使用运行运行手册的用户的权限。
对于 Username,输入用于连接实例的用户名。此参数用于确定是否向用户授予 IAM 访问权限。
对于 EC2InstanceConnectRoleOrUser,输入用于 EC2 Instance Connect 向实例推送密钥的 IAM 身份的 ARN。
(可选)对于 SSHPort,输入在实例上配置的 SSH 端口。默认值为 22,端口号必须介于 1 到 65535 之间。
(可选)对于 SourceNetworkType,输入用于连接实例的网络类型。
(可选)对于 SourceIpCIDR,输入无类别域间路由 (CIDR) 范围,该范围包括您用于连接到 EC2 Instance Connect 的设备的 IP 地址。如果此字段为空,运行手册将无法确定实例的安全组和网络访问控制列表 (ACL) 规则是否允许 SSH 流量。
- 选择 Execute(执行)。
- 在 Outputs(输出)部分中查看详细结果。
手动对 EC2 实例进行故障排除
要解决连接到 EC2 实例时出现的问题,请确认以下配置:
使用基于浏览器的 SSH 连接
基于浏览器的 SSH 连接要求您的实例的安全组入站规则允许 EC2 Instance Connect 在 TCP 端口 22 上访问 SSH。
EC2 Instance Connect 使用特定的 IP 地址范围与您的实例进行基于浏览器的 SSH 连接。这些 AWS IP 地址范围因 AWS 区域而异。要查找特定区域中 EC2 Instance Connect 的 IP 地址范围,请运行以下命令。
**注意:**在以下命令中,请将 us-east-1 替换为您的实例所在的区域。确保您的实例位于 EC2 Instance Connect 支持的区域。
Windows
使用 Windows PowerShell 运行以下命令:
PS C:\> Get-AWSPublicIpAddressRange -Region us-east-1 -ServiceKey EC2_INSTANCE_CONNECT | select IpPrefix
Linux
使用 curl 和 jq 运行以下命令:
$ curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="EC2_INSTANCE_CONNECT") | .ip_prefix'
更新您的安全组入站规则,以允许上述命令返回的 IP 地址范围访问 TCP 端口 22。
使用 EC2 Instance Connect CLI 连接
更新您的安全组入站规则,以允许您的 IP 地址访问 TCP 端口 22。
相关信息
运行由 Systems Manager Automation 提供支持的自动操作
使用 EC2 Instance Connect 连接到您的 Linux 实例
如果我在 Amazon EC2 实例初次启动后丢失了 SSH 密钥对,我该如何连接到该实例?
如何解决使用 SSH 连接到 Amazon EC2 Linux 实例时出现的问题?