【问题标题】:SSH'ing into AWS EC2 Instance located in Private Subnet in a VPC通过 SSH 连接到位于 VPC 的私有子网中的 AWS EC2 实例
【发布时间】:2022-01-12 22:36:06
【问题描述】:

我已经解决这个问题几个小时了,也许不可能,也许是这样。

我在 AWS 中有一个 VPC,有几个 EC2 实例和 Lambda 实例。

截至目前,lambda 可以毫无问题地调用、ssh 等到 EC2 服务器。

我的 lambdas 在“出站”中使用只有 HTTP、HTTPS 和 SSH 的安全组。

我的 ec2 默认安全组仅接受 22 个入站(来自我的 Lambda 安全组和我的办公室 IP)。

如果我在我的公共子网上创建一个 ec2 实例,我和我的 lambda 函数都可以通过 ssh 访问它。

如果我在我的 PRIVATE 子网上创建它,我的 lambdas 可以 ssh 但我不能...

我真的必须有一个 NAT SERVER 才能实现这一点吗?

TL:DR;只有我的办公室和我的 lambdas 才能访问我的 ec2 实例。

【问题讨论】:

  • 是的,您需要 NAT 等等。否则,私有子网中的 EC2 实例如何将流量发送到 Internet?它有一个 RFC1918 IP 地址,因此来自它的流量在 Internet 上是不可路由的。当然,除非你有通往 VPC 的 VPN 隧道,我假设你没有。

标签: amazon-web-services amazon-ec2 ssh


【解决方案1】:

考虑对 EC2 实例进行 SSH 访问的第一个选项是 EC2 Instance Connect,它允许您使用 IAM 控制对 EC2 实例的访问,并提供从 AWS 控制台或常规命令行 SSH 工具进行的访问。

第二个选项是AWS Systems Manager Session Manager for Shell Access to EC2 Instances。您基本上在浏览器中运行 SSH 会话,它可以针对所有 EC2 实例,无论公共/私有 IP 或子网如何。 EC2 实例必须运行最新版本的 SSM 代理,并且必须使用适当的 IAM 角色(包括来自 AmazonEC2RoleForSSM 的关键策略)启动。不需要允许入站端口 22 的堡垒主机或防火墙规则。

要考虑的第三个选项是AWS Systems Manager Run Command,它允许您在 EC2 实例上远程运行命令。它不像 SSH 那样具有交互性,但如果您只是想运行一系列脚本,那么它非常好。同样,该实例必须运行 SSM 代理并具有适当的 IAM 策略,并且此选项避免了通过堡垒主机建立隧道的需要。

最后,如果您确实必须通过 SSH 从您的办公室笔记本电脑连接到私有子网中的 EC2 实例,您可以通过堡垒主机执行此操作。你需要一些东西:

  1. VPC 中的 IGW 和 NAT
  2. 在 VPC 的公共子网中具有公共 IP 的堡垒主机
  3. 堡垒上的安全组允许从您的笔记本电脑进行入站 SSH
  4. 从私有子网到 NAT 的默认路由
  5. 私有 EC2 实例上允许来自堡垒的入站 SSH 的安全组

然后你必须通过堡垒主机隧道。请参阅Securely Connect to Linux Instances Running in a Private Amazon VPC 了解更多信息。

【讨论】:

  • @MatiasN 为什么需要通过 SSH 连接到私有实例?也许这将有助于我们提出更好的建议。如果只是简单地运行脚本,那么您可以使用 SSM 运行命令远程执行此操作,而无需 SSH 或通过堡垒主机进行连接。
  • 这听起来是个不错的计划。它也会大大简化我的 lambda。谢谢
  • 此外,概念证明是端口 22 对任何人关闭,但 lambda 函数和我的办公室 ip
【解决方案2】:
  1. 创建堡垒主机。

  2. 这将是公共子网中的公共 EC2 实例,与您的私有 ec2 实例具有相同的安全组。

  3. 确保允许安全组内的流量。您可以通过为您的安全组创建入站规则来完成此操作。

  4. 现在在 Windows 10 中,您可以通过命令提示符运行以下命令:

    ssh -i your_private_key.pem ec2-user@private_ip -o "proxycommand ssh -W %h:%p -i your_private_key.pem ec2-user@public_ip"

  5. 在上面发布的命令中替换以下三件事:

    • your_private_key
    • private_ip
    • public_ip

【讨论】:

    【解决方案3】:

    你可以参考这个:https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html 您必须使用 NAT 网关才能访问私有子网中的任何内容。

    【讨论】:

    • 我已经遵循了这个(正是这个)指南。但是,如果我在私有子网中启动它,我仍然无法通过 SSH 连接到 ec2 实例。不过,lambda 可以。
    • 您的连接是否超时?如果您愿意,我们可以尝试调试它:)
    • 是的。我创建了一个简单的 Lambda,它通过 SSH 连接到 ec2 机器并简单地运行一个命令。诸如“安装python”之类的东西..它可以工作。但是当我尝试通过我的 mac 终端访问它时,它就会超时。
    • 您采取了哪种方法,使用 NAT GW 还是使用 NAT 实例?
    • 好吧,别管我的回答,正确的是@jarmod's
    猜你喜欢
    • 2020-04-27
    • 2017-07-23
    • 2016-07-21
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多