【问题标题】:Connection failure using EC2 Instance Connect (browser-based SSH connection)使用 EC2 Instance Connect 连接失败(基于浏览器的 SSH 连接)
【发布时间】:2021-06-06 14:02:21
【问题描述】:

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

作为一个简短的提醒,我应该补充一点,从技术上讲,“实例”是在 Amazon 的 Elastic Compute Cloud (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 提出的故障排除文档中讨论的大多数故障案例,并在我的实例上进行了验证。然而问题依然存在。我还应该补充一点,我从未尝试过“会话管理器”连接方法,尽管打开它的选项卡已经可以提供一些关于“未安装”代理和功能的信息。

关于这个问题的任何想法?有人遇到同样的问题吗?

【问题讨论】:

  • 发布了一个解决方案,如果它对您有任何帮助,您可以接受它作为答案,以便将来帮助其他人:)
  • @JatinMehrotra 感谢您提出的解决方案,您能指定我应该在哪里运行您建议的命令吗?我应该在本地机器上运行它吗?如果是,我确实运行了它,但它没有返回任何值。
  • 如果您使用的是 Windows,请使用此 Get-AWSPublicIpAddressRange -Region us-east-1 -ServiceKey EC2_INSTANCE_CONNECT | select IpPrefix 将 us-east-1 替换为您启动 ec2 的区域,否则对于 linuxc 或 macos,请使用此 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'(注意 linux 和 macos 命令将需要在运行此命令之前,您必须拥有 curl 和 jq 实用程序)
  • @JatinMehrotra,我在输入区域名称时犯了一个小错误,现在它已修复,并且运行良好,我可以使用 EC2 Instance Connect(基于浏览器)进行连接。再次感谢您。
  • 很高兴为您提供帮助 :)

标签: amazon-web-services amazon-ec2 aws-ec2-instance-connect


【解决方案1】:

来自Docs

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

原因 -> EC2 Instance Connect 的工作原理是在您的 Web 浏览器和 AWS 上的后端 EC2 Instance Connect 服务之间建立 HTTPS 连接。然后,EC2 Instance Connect 与目标实例建立“大部分正常”的 SSH 连接,换句话说,请求来自后端 ec2 实例连接,而不是您的浏览器,这就是它需要该区域接受范围内的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 2019-01-21
    • 2016-09-09
    相关资源
    最近更新 更多