如何排查使用 EC2 Instance Connect 连接我的 EC2 实例时遇到的问题?

上次更新日期:2021 年 4 月 26 日

当我尝试使用 Amazon EC2 Instance Connect 连接到我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例时,我收到了以下错误消息:

“设置实例连接时出现问题

登录失败。如果此实例刚刚启动,请在一两分钟后重试。”

如何排查此问题?

简短描述

以下是可能导致 EC2 Instance Connect 无法正常工作的常见原因:

  • EC2 Instance Connect 不支持所使用的操作系统发行版。
  • EC2 Instance Connect 软件包未安装在实例上。
  • AWS Identity and Access Management (IAM) 策略或权限缺失或不正确。
  • 与该实例关联的安全组没有列出 EC2 Instance Connect 服务 IP。

要使用基于浏览器的客户端进行连接,您的实例必须具有一个公有 IPv4 地址。如果您的实例没有公有 IP 地址,请使用 EC2 Instance Connect 命令行界面 (CLI),从同一 VPC 内的计算机进行连接。有关更多信息,请参阅使用 EC2 Instance Connect 进行连接中的限制部分。

注意:如果您已为 Linux 启用 EC2 串行控制台,可以使用它来排查受支持的基于 Nitroa 的实例类型问题。串行控制台可帮助您排查启动问题、网络配置和 SSH 配置问题。串行控制台无需网络连接即可连接到您的实例。您可以使用 Amazon EC2 控制台或 AWS 命令行界面 (AWS CLI) 访问串行控制台。

在使用串行控制台之前,您必须在账户级别授予对串行控制台的访问权限,并创建 IAM 策略以向 IAM 用户授予访问权限。此外,每个使用串行控制台的实例都必须至少包含一个基于密码的用户。如果您的实例无法访问,并且您尚未配置对串行控制台的访问权限,可按照以下文章链接中提供的关于手动连接到实例的说明进行操作。

有关为 Linux 配置 EC2 串行控制台的信息,请参阅配置对 EC2 串行控制台的访问权限

注意:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

解决方法

1.    验证 EC2 Instance Connect 支持您的实例的 Linux 发行版

2.    验证您已在支持的实例上安装了 EC2 Instance Connect 软件包

3.    验证尝试使用 EC2 Instance Connect 的 IAM 用户具有将公有密钥推送到实例的权限

4.    验证实例的安全组规则列出了 EC2 Instance Connect 的 IP:

基于浏览器的 SSH 连接

如果您使用基于浏览器的 SSH 连接,则实例的安全组入站规则需要允许 EC2 Instance Connect 通过TCP 端口 22 访问 SSH。

通过基于浏览器的 SSH 连接来访问您的实例时,EC2 Instance Connect 会使用特定的 IP 范围。这些 IP 范围因 AWS 区域而异。要查找 EC2 Instance Connect 在特定区域使用的 AWS IP 地址范围,请使用以下命令:

注意:在以下命令中,请将 us-east-1 替换为您的实例所在的 AWS 区域。

Windows(需要使用适用于 AWS 的 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。