使用 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

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

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

您可以使用 Amazon EC2 控制台连接到实例,如下所示。

使用基于浏览器的客户端连接到实例
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. 选择 EC2 Instance Connect 选项卡。

  5. 对于连接类型,选择使用 EC2 Instance Connect Endpoint 进行连接

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

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

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

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

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

您可以使用 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-0123456789example \ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-id i-0123456789example'

对于:

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

  • ec2-user@i-0123456789example - 指定用于启动实例的 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-0123456789example \ --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.

如果仅知道实例 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 --connection-type eice
提示

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

您可以在 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-0123456789example \ --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 实例的更多故障排除技巧,请参阅 排查 Linux 实例的连接问题。有关 Windows 实例的故障排除技巧,请参阅 排查有关连接到 Windows 实例的问题

ErrorCode: AccessDeniedException

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