使用 EC2 Instance Connect 连接失败基于浏览器的 SSH 连接

问题描述

启动 AWS EC2 实例似乎很简单,但在连接到新启动的实例时,事情变得很棘手。连接到这样一家科技巨头提出的实例的过程非常违反直觉。

作为简短的提醒,我应该补充一点,“实例”在技术上是一台运行在 Amazon 的弹性计算云 (EC2) 上的虚拟机,有关详细信息,可以查看 this link

本讨论中提到的 ec2 实例是 Ubuntu Server 20.04 LTS (HVM)。 给出了使用 EC2 Linux 实例的说明here

AWS EC2 提出了三种不同的实例连接方式:

  1. EC2 实例连接(基于浏览器的 SSH 连接),
  2. 会话管理器
  3. SSH 客户端

现在关于连接到上述实例,只有某些连接正确建立,其余建议方法失败,以下是连接成功和失败的列表:

  1. Ubuntu 实例,安全组源“Custom=0.0.0.0/0”,使用 EC2 Instance Connect(基于浏览器的 SSH 连接)和 SSH 客户端建立连接。
  2. Ubuntu 实例,安全组源“My IP=$IP”,仅使用 SSH 客户端(Ubuntu 上的终端和 Windows 上的 PuTTY)建立连接,而不使用 EC2 实例连接。

以上两种情况均已在 Ubuntu 20.04 和 Windows 10 上作为本地机器进行过尝试,但在两台机器上问题仍然相似。我经历了建议的故障排除文档 here 中讨论的大多数失败案例,并在我的实例上进行了验证。然而问题依然存在。我还应该补充一点,我从未尝试过“会话管理器”连接方法,尽管打开它的选项卡已经会提供一些关于“未安装”代理和功能的信息。

对这个问题有什么想法吗?有人遇到同样的问题吗?

解决方法

来自Docs

(基于 Amazon EC2 控制台浏览器的客户端)我们建议您的实例允许来自为服务发布的推荐 IP 块的入站 SSH 流量。

原因 -> EC2 Instance Connect 的工作原理是在您的 Web 浏览器和 aws 上的后端 EC2 Instance Connect 服务之间建立 HTTPS 连接。然后,EC2 Instance Connect 与目标实例建立“基本正常”的 SSH 连接,换句话说,请求来自后端 ec2 instance connect 而不是您的浏览器,这就是为什么它需要来自该区域的可接受范围的 IP 地址。

基于浏览器 EC2 Instance Connect 将特定 IP 范围用于基于浏览器的 SSH 连接到您的实例。这些 IP 范围因 AWS 区域而异。要查找特定区域中 EC2 Instance Connect 的 AWS IP 地址范围,请使用以下内容(只需将您的区域替换为您的区域)(对于 Linux,需要 curl 和 jq 作为先决条件)

 curl -s https://ip-ranges.amazonaws.com/ip-ranges.json| jq -r '.prefixes[] | select(.region=="Your region") | select(.service=="EC2_INSTANCE_CONNECT") | .ip_prefix'

无论返回什么值,只要加起来就可以满足您的安全规则,它就会起作用。

Ubuntu 实例,安全组源“Custom=0.0.0.0/0”,使用 EC2 Instance Connect(基于浏览器的 SSH 连接)和 SSH 客户端建立连接。

这是可行的,因为 0.0.0.0/0 允许来自所有 IP 范围(也包括您所在地区的 IP)的连接。 有关更多详细信息,请尝试阅读此 troubleshoot

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...