我的问题”:
我想通过 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 管理员。