我想要通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 VPC 资源。我该如何操作?

上次更新日期:2020 年 11 月 16 日

我想通过 AWS Systems Manager 使用 SSH 隧道来访问我的私有 VPC 资源。我该如何操作?

简短描述

AWS Systems Manager Session Manager 使用 Systems Manager 基础设施,以通过实例创建一个类似 SSH 的会话。此功能意味着,Session Manager 可通过隧道传输真正的 SSH 连接,从而使您可以直接从本地计算机中通过隧道传输到 Virtual Private Cloud (VPC) 内的另一个资源。您创建的托管实例将充当至您的 AWS 资源的堡垒主机或网关。这种配置的优势包括:

  • 提高安全性:这种配置只能用于一个 Amazon Elastic Compute Cloud (Amazon EC2) 实例(堡垒主机),其出站端口 443 与 Systems Manager 基础设施连接。这样一来,您无需任何入站连接便可以使用 Session Manager。本地资源需要仅允许来自充当堡垒主机的实例的入站流量。因此,不需要公开打开任何入站规则。
  • 易用性:您可以直接从您的本地计算机访问私有 VPC 中的资源。

注意:有关如何使用 Systems Manager 通过终端访问 EC2 实例的说明,请参阅设置 Systems Manager

先决条件

完成 Session Manager 先决条件

安装 AWS 命令行界面 (AWS CLI) 的 Session Manage 插件

通过 Session Manager 启用 SSH 连接,并确保满足 SSH 连接要求

注意:您必须安装以下各项才能使用 SSH 功能:

1.    AWS Systems Manager 代理(SSM 代理)2.3.672.0 版或更新版本。

2.    在本地计算机上安装 Session Manager 插件 1.1.23 版或更新版本。

3.    在本地计算机上安装 AWS CLI v1.16.12 或更高版本

解决方法

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

1.    使用 Session Manager 启动 SSH 隧道。

ssh -i /path/my-key-pair.pem username@instance-id -L localport:targethost:destport

2.    在步骤 1 中创建的目标端口上测试对隧道的访问。

telnet 127.0.0.1 localport

在前面的示例中,127.0.0.1 localport 转换为访问 targethost:destport

示例配置

场景 1

从您的本地计算机创建一个隧道,以将 SSM 主机用作堡垒主机访问私有 EC2 示例上运行的 MySQL 数据库。

使用的资源

instance1:用作堡垒主机并由 AWS Systems Manager 托管的 EC2 实例。

    主机名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2:在默认端口 3306 上运行 MySQL 数据库的 EC2 实例。

    主机名 = ec2-198-51-100-2.compute-1.amazonaws.com

说明

1.    从本地计算机(例如您的笔记本电脑)运行 SSH 命令以使用基于 Session Manager 的 SSH 连接 instance1。此命令在 instance2 上建立至端口 3306 的隧道,并将其提供在本地计算机的端口 9090 上。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306

在前面的示例中,端口 9090 是本地计算机上的可用端口。

2.    从本地计算机中,使用步骤 1 中所用的可用端口(在此示例中为 9090)访问数据库

mysql -u user -h 127.0.0.1 -P 9090 -p password

注意:确保 instance2 上的所有安全组网络访问控制列表(网络 ACL)、安全规则或第三方安全软件都允许来自 instance1 的流量。在前面的示例中,instance2 需要允许来自 instance1 的端口 3306 访问。

场景 2

通过从您的本地计算机进行的单个 SSH 连接创建三个隧道:

  • 连接到 instance1 中的 SSH 端口
  • 访问 instance2 中的 MySQL 数据库
  • 访问 instance3 中的 Web 服务器

使用的资源

instance1:用作堡垒主机并由 AWS Systems Manager 托管的 EC2 实例。

    主机名 = ec2-198-51-100-1.compute-1.amazonaws.com Instance id = i-0123456789abcdefa

instance2:位于私有子网中的 EC2 数据库实例。

    主机名 = ec2-198-51-100-2.compute-2.amazonaws.com

instance3:位于私有子网中的 EC2 实例

    主机名 = ec2-198-51-100-3.compute-3.amazonaws.com

说明

1.    使用 SSH 命令启动三个隧道的会话。

注意:命令中有三个单独的隧道调用。

ssh -i /path/key-pair_instance1.pem username_of_instance1@i-0123456789abcdefa -L 8080:ec2-198-51-100-1.compute-1.amazonaws.com:22 -L 9090:ec2-198-51-100-2.compute-1.amazonaws.com:3306 -L 9091:ec2-198-51-100-3.compute-1.amazonaws.com:80

在前面的示例中,8080、9090 和 9091 是本地计算机上的可用端口。

2.    访问从本地计算机到 instance1 的 SSH。本地端口 8080 通过隧道传输到 instance1 上的 SSH 端口 (22)。key-pairusername 用于您通过隧道传输到的实例(在本示例中为 instance1)。

ssh -i /path/key-pair_instance1.pem username_of_instance1@127.0.0.1 -p 8080

3.    访问 instance2 上的数据库。本地端口 9090 通过隧道传输到 instance2 上的端口 3306。

mysql -u user -h 127.0.0.1 -P 9090 -p password

4.    从本地计算机上打开浏览器并导航至 instance3 上的网站,以进行访问。

http://127.0.0.1:9091

注意:确保 instance2 instance3 上的所有安全组网络 ACL、安全规则或第三方安全软件都允许来自 instance1 的流量。在前面的示例中,instance3 必须允许来自 instance1 的端口 80 访问。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?