amazon-web-services - 通过 AWS SSM 代理命令设置 SSH 隧道
问题描述
我的问题”:
我想通过 SSH 隧道连接到我的 DocumentDB。我不确定这是否可能,但我想试一试。
是什么阻止我这样做:
在提供我的 EC2 pem 文件和数据库(通用 RDS pem)的同时,我无法转而转发 DocumentDB 端口。
我的设置:
我已经在 ECS Fargate 中设置了我的基础架构,连接到 DocumentDB。唯一可供公众使用的端口是 80 和 443(80 重新路由到 443),我想保持这种状态。我已经设置了一个 EC2 实例(没有传出路由),当需要通过 AWS SSM 连接时,我正在启动(并且我想保持这种状态)。
EC2 实例是一个 Amazon Linux 2 AMI。
现在我已经设置了一个代理命令来通过 SSH 连接,而无需在我的 ~/.ssh/config 文件中使用 SSM 打开端口。
# --- SSH over AWS Session Manager ---
host i-*
ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
这按预期工作,我能够通过 SSH 连接并通过 SCP 将文件从 EC2 实例复制到 EC2 实例。我可以使用这个 SSH 连接(或未更改的 AWS SSM 连接)通过 mongoshell 访问我的 DocumentDB,但现在我问自己是否可以打开一个 SSH 隧道到它。
我试过的:
ssh -L 8022:my-document-db-instance.amazonaws.com:27017 ssm-user@i-ec2-instance -i ~/.ssh/ec2-instance.pem -v
到 EC2 实例的 SSH 隧道已成功创建(至少看起来如此)并且没有显示任何错误,但我无法通过 Robo3T(或 mongoshell)连接到数据库。我怀疑在隧道中打开连接是错误的,但我不知道如何启动它。
我尝试打开通往 EC2 实例的隧道,然后通过 Robo3T 从那里进行隧道传输,但效果不佳(部分原因是我不知道要连接到 EC2 上的哪个端口)。
我不得不承认我不是我想成为的 Linux 管理员。
解决方案
我在通过 aws 会话管理器将端口转发到 rds(mysql) 时遇到了类似的问题。您可以尝试以下选项
- 确保 DocumentDB 已启动并正在运行。
- 确保附加到 DocumentDB 的安全组仅从堡垒主机的安全组打开入站端口 (27017)。
- 确保附加到 EC2 实例的安全组已打开出站端口 (27017)
- 通过 Robo3T 连接时将 localhost 更改为环回地址 (127.0.0.1)。
- 使用 ec2-user 而不是 ssm-user。
推荐阅读
- java - appUpdateManager 返回错误 LinkToDeath
- python - Pandas - 按索引对数据进行分组
- c# - sharepointonline userphoto.aspx 不返回带有不记名令牌的图片
- plot - 如果存在其他绘图元素,则在 Makie.jl 中链接轴
- javascript - 如何根据搜索输入获取 react-select 中过滤(可选)选项的列表?
- c++ - FMX 3D 和 fopen() 函数
- docker - 如何升级作为 docker 容器运行的 MariaDB
- javascript - 平均分摊成本
- sql-server - 实体框架数据读取器与带空格的列名不兼容(数据库优先)
- list - SwiftUI - 如何制作可选择的可滚动列表?