0

我的问题”:

我想通过 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 管理员。

4

1 回答 1

0

我在通过 aws 会话管理器将端口转发到 rds(mysql) 时遇到了类似的问题。您可以尝试以下选项

  1. 确保 DocumentDB 已启动并正在运行。
  2. 确保附加到 DocumentDB 的安全组仅从堡垒主机的安全组打开入站端口 (27017)。
  3. 确保附加到 EC2 实例的安全组已打开出站端口 (27017)
  4. 通过 Robo3T 连接时将 localhost 更改为环回地址 (127.0.0.1)。
  5. 使用 ec2-user 而不是 ssm-user。
于 2020-07-17T10:04:02.463 回答