使用 EC2 Instance Connect 端点连接到 Amazon EC2 实例 - Amazon Elastic Compute Cloud

使用 EC2 Instance Connect 端点连接到 Amazon EC2 实例

您可以使用 EC2 Instance Connect 端点连接到支持 SSH 或 RDP 的 Amazon EC2 实例。

先决条件
  • 您必须拥有连接到 EC2 Instance Connect Endpoint 所需的 IAM 权限。有关更多信息,请参阅 使用 EC2 Instance Connect 端点连接到实例的权限

  • EC2 Instance Connect Endpoint 必须处于可用(控制台)或 create-complete (AWS CLI) 状态。如果没有用于您的 VPC 的 EC2 Instance Connect 端点,则可以创建一个。有关更多信息,请参阅 创建 EC2 Instance Connect Endpoint

  • 您的实例必须具有一个(私有或公有)IPv4 地址。EC2 Instance Connect 端点不支持连接到使用 IPv6 地址的实例。

  • (Linux 实例)要使用 Amazon EC2 控制台连接到您的实例,或者要使用 CLI 进行连接并让 EC2 Instance Connect 处理临时密钥,您的实例必须安装 EC2 Instance Connect。有关更多信息,请参阅 安装 EC2 Instance Connect

  • 确保实例安全组允许来自 EC2 Instance Connect 端点的入站 SSH 流量。有关更多信息,请参阅 目标实例安全组规则

使用 Amazon EC2 控制台连接到您的 Linux 实例

可以使用 Amazon EC2 控制台(基于浏览器的客户端)连接到实例,如下所示。

使用 Amazon EC2 控制台连接到实例
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Instances (实例)

  3. 选择该实例,然后选择连接

  4. 选择 EC2 Instance Connect 选项卡。

  5. 选择使用私有 IP 连接

  6. 对于 EC2 Instance Connect 端点,选择该 EC2 Instance Connect 端点的 ID。

  7. 对于用户名,如果您用于启动实例的 AMI 使用的用户名不是 ec2-user,请输入正确的用户名。

  8. 对于最大隧道持续时间(秒),输入 SSH 连接允许的最大持续时间。

    该持续时间必须符合 IAM 策略中指定的任何 maxTunnelDuration 条件。如果您无权访问该 IAM 策略,请联系您的管理员。

  9. 选择连接。这将为您的实例打开一个终端窗口。

使用 SSH 连接到 Linux 实例

您可以使用 SSH 连接到您的 Linux 实例,然后使用 open-tunnel 命令建立私有隧道。可在单连接或多连接模式下使用 open-tunnel

有关如何使用 AWS CLI 通过 SSH 连接到您的 Linux 实例,请参阅 使用 AWS CLI进行连接

下面的示例使用了 OpenSSH。您可以使用任何其他支持代理模式的 SSH 客户端。

单一 连接

仅允许使用 SSH 和 open-tunnel 命令建立到实例的单一连接

按照如下所示使用 sshopen-tunnel AWS CLI 命令。-o 代理命令包含创建通往实例的私有隧道的 open-tunnel 命令。

ssh -i my-key-pair.pem ec2-user@i-1234567890abcdef0 \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-1234567890abcdef0'

对于:

  • -i - 指定用于启动实例的密钥对。

  • ec2-user@i-1234567890abcdef0 - 指定用于启动实例的 AMI 的用户名和实例 ID。

  • --instance-id - 指定要连接到的实例的 ID。或者,指定 %h,它从用户那里提取实例 ID。

多连接

要允许与一个实例建立多连接,请先运行 open-tunnel AWS CLI 命令开始侦听新的 TCP 连接,然后使用 ssh 创建到实例的新 TCP 连接和私有隧道。

要使用 SSH 和 open-tunnel 命令允许建立到实例的多连接
  1. 运行以下命令开始侦听本地机器上指定端口上的新 TCP 连接。

    aws ec2-instance-connect open-tunnel \ --instance-id i-1234567890abcdef0 \ --local-port 8888

    预期输出

    Listening for connections on port 8888.
  2. 新的终端窗口中,运行以下 ssh 命令以创建到实例的新 TCP 连接和私有隧道。

    ssh -i my-key-pair.pem ec2-user@localhost -p 8888

    预期输出 - 在第一个终端窗口中,您将看到以下内容:

    [1] Accepted new tcp connection, opening websocket tunnel.

    您可能还会看到以下内容:

    [1] Closing tcp connection.

使用 AWS CLI 连接到 Linux 实例

如果仅知道实例 ID,则可以使用 ec2-instance-connect AWS CLI 命令通过 SSH 客户端连接到实例。有关使用 ec2-instance-connect 命令的更多信息,请参阅 使用 AWS CLI进行连接

先决条件

安装 AWS CLI 版本 2 并使用您的凭证对其进行配置。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的 Install or update to the latest version of the AWS CLIConfigure the AWS CLI。或者,在其预先经过身份验证的 shell 中打开 AWS CloudShell 并运行 AWS CLI 命令。

要使用实例 ID 和 EC2 Instance Connect Endpoint 连接到实例

如果仅知道实例 ID,请使用 ec2-instance-connect CLI 命令,并指定 ssh 命令、实例 ID 和 --connection-type 参数及 eice 值。

aws ec2-instance-connect ssh --instance-id i-1234567890example --os-user ec2-user --connection-type eice
提示

如果使用此命令时出现错误,请确保使用的是 AWS CLI 版本 2。ssh 参数仅适用于 AWS CLI 版本 2。有关更多信息,请参阅《AWS Command Line Interface 开发人员指南》中的关于 AWS CLI 版本 2

使用 RDP 连接到 Windows 实例

您可以在 EC2 Instance Connect Endpoint 上使用远程桌面协议(RDP)连接到没有公有 IPv4 地址或公有 DNS 名称的 Windows 实例。

使用 RDP 客户端连接到 Windows 实例
  1. 完成使用 RDP 连接到 Windows 实例中的步骤 1 至 8。在步骤 8 中下载 RDP 桌面文件后,您将收到无法连接的消息,这是意料之中的,因为您的实例没有公有 IP 地址。

  2. 运行以下命令,建立到实例所在 VPC 的私有隧道。--remote-port 必须是 3389,因为 RDP 默认使用端口 3389。

    aws ec2-instance-connect open-tunnel \ --instance-id i-1234567890abcdef0 \ --remote-port 3389 \ --local-port any-port
  3. 下载文件夹中,找到您下载的 RDP 桌面文件,然后将其拖到 RDP 客户端窗口中。

  4. 右键单击该 RDP 桌面文件并选择编辑

  5. 编辑 PC 窗口中,对于 PC 名称(要连接到的实例),输入 localhost:local-port,其中 local-port 使用的值与在步骤 2 中指定的值相同,然后选择保存

    请注意,以下编辑 PC 窗口的屏幕截图来自 Mac 上的 Microsoft 远程桌面。如果您使用的是 Windows 客户端,窗口可能会有所不同。

    RDP 客户端的 PC 名称字段中包含示例“localhost:5555”。
  6. 在 RDP 客户端中,右键单击您刚才配置的 PC,然后选择连接来连接到您的实例。

  7. 根据提示,输入管理员账户的解密密码。

故障排除

使用以下信息帮助您诊断和修复您在使用 EC2 Instance Connect Endpoint 连接实例时可能遇到的问题。

无法连接到您的实例

以下是您可能无法连接到实例的常见原因:

  • 安全组 – 检查分配给 EC2 Instance Connect Endpoint 和您的实例的安全组。有关所需安全组规则的更多信息,请参阅 EC2 Instance Connect Endpoint 安全组

  • 实例状态 – 验证您的实例是否处于 running 状态。

  • 密钥对 – 如果您用于连接的命令需要私钥,请确认您的实例是否有公钥,以及您是否拥有相应的私钥。

  • IAM 权限 – 验证您是否拥有所需的 IAM 权限。有关更多信息,请参阅 授予使用 EC2 Instance Connect 端点的权限

有关 Linux 实例的更多故障排除技巧,请参阅 排查 Amazon EC2 Linux 实例的连接问题。有关 Windows 实例的故障排除技巧,请参阅 排查连接到 Amazon EC2 Windows 实例时遇到的问题

ErrorCode: AccessDeniedException

如果您收到 AccessDeniedException 错误,并且 IAM policy 中已指定 maxTunnelDuration 条件,确保当您连接到实例时指定 --max-tunnel-duration 参数。有关该参数的更多信息,请参阅 AWS CLI 命令参考中的 open-tunnel