使用 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 控制台连接到实例
-
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择实例。
-
选择该实例,然后选择连接。
-
选择 EC2 Instance Connect 选项卡。
-
对于连接类型,选择使用 EC2 Instance Connect Endpoint 进行连接。
-
对于 EC2 Instance Connect 端点,选择该 EC2 Instance Connect 端点的 ID。
-
对于用户名,如果您用于启动实例的 AMI 使用的用户名不是
ec2-user
,请输入正确的用户名。 -
对于最大隧道持续时间(秒),输入 SSH 连接允许的最大持续时间。
该持续时间必须符合 IAM 策略中指定的任何
maxTunnelDuration
条件。如果您无权访问该 IAM 策略,请联系您的管理员。 -
选择连接。这将为您的实例打开一个终端窗口。
使用 SSH 连接到 Linux 实例
您可以使用 SSH 连接到您的 Linux 实例,然后使用 open-tunnel
命令建立私有隧道。可在单连接或多连接模式下使用 open-tunnel
。
有关如何使用 AWS CLI 通过 SSH 连接到您的 Linux 实例,请参阅 使用 AWS CLI进行连接。
下面的示例使用了 OpenSSH
单一 连接
仅允许使用 SSH 和 open-tunnel
命令建立到实例的单一连接
按照如下所示使用 ssh
和 open-tunnel-o
代理命令包含创建通往实例的私有隧道的 open-tunnel
命令。
ssh -i
my-key-pair
.pemec2-user
@i-0123456789example
\ -o ProxyCommand='aws ec2-instance-connect open-tunnel --instance-idi-0123456789example
'
对于:
-
-i
- 指定用于启动实例的密钥对。 -
- 指定用于启动实例的 AMI 的用户名和实例 ID。ec2-user
@i-0123456789example
-
--instance-id
- 指定要连接到的实例的 ID。或者,指定%h
,它从用户那里提取实例 ID。
多连接
要允许与一个实例建立多连接,请先运行 open-tunnelssh
创建到实例的新 TCP 连接和私有隧道。
要使用 SSH 和 open-tunnel
命令允许建立到实例的多连接
-
运行以下命令开始侦听本地机器上指定端口上的新 TCP 连接。
aws ec2-instance-connect open-tunnel \ --instance-id
i-0123456789example
\ --local-port8888
预期输出
Listening for connections on port 8888.
-
在新的终端窗口中,运行以下
ssh
命令以创建到实例的新 TCP 连接和私有隧道。ssh -i
my-key-pair
.pem ec2-user@localhost -p8888
预期输出 - 在第一个终端窗口中,您将看到以下内容:
[1] Accepted new tcp connection, opening websocket tunnel.
您可能还会看到以下内容:
[1] Closing tcp connection.
使用 AWS CLI 连接到 Linux 实例
如果仅知道实例 ID,则可以使用 ec2-instance-connect
先决条件
安装 AWS CLI 版本 2 并使用您的凭证对其进行配置。有关更多信息,请参阅《AWS Command Line Interface 用户指南》中的 Install or update to the latest version of the AWS CLI 和 Configure the AWS CLI。或者,在其预先经过身份验证的 shell 中打开 AWS CloudShell 并运行 AWS CLI 命令。
要使用实例 ID 和 EC2 Instance Connect Endpoint 连接到实例
如果仅知道实例 ID,请使用 ec2-instance-connectssh
命令、实例 ID 和 --connection-type
参数及 eice
值。
aws ec2-instance-connect ssh --instance-id
i-1234567890example
--os-userec2-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 实例
-
完成使用 RDP 连接到 Windows 实例中的步骤 1 至 8。在步骤 8 中下载 RDP 桌面文件后,您将收到无法连接的消息,这是意料之中的,因为您的实例没有公有 IP 地址。
-
运行以下命令,建立到实例所在 VPC 的私有隧道。
--remote-port
必须是3389
,因为 RDP 默认使用端口 3389。aws ec2-instance-connect open-tunnel \ --instance-id
i-0123456789example
\ --remote-port 3389 \ --local-portany-port
-
在下载文件夹中,找到您下载的 RDP 桌面文件,然后将其拖到 RDP 客户端窗口中。
-
右键单击该 RDP 桌面文件并选择编辑。
-
在编辑 PC 窗口中,对于 PC 名称(要连接到的实例),输入
localhost:
,其中local-port
使用的值与在步骤 2 中指定的值相同,然后选择保存。local-port
请注意,以下编辑 PC 窗口的屏幕截图来自 Mac 上的 Microsoft 远程桌面。如果您使用的是 Windows 客户端,窗口可能会有所不同。
-
在 RDP 客户端中,右键单击您刚才配置的 PC,然后选择连接来连接到您的实例。
-
根据提示,输入管理员账户的解密密码。
故障排除
使用以下信息帮助您诊断和修复您在使用 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