如何通过 SSH 隧道通过 AWS 堡垒/跳转服务器从笔记本电脑访问 phpMyAdmin 到使用 .ssh/config 的 EC2 实例

Posted

技术标签:

【中文标题】如何通过 SSH 隧道通过 AWS 堡垒/跳转服务器从笔记本电脑访问 phpMyAdmin 到使用 .ssh/config 的 EC2 实例【英文标题】:How to access phpMyAdmin from laptop via SSH tunnel through AWS bastion/jump server to EC2 instance using .ssh/config 【发布时间】:2020-07-24 08:39:04 【问题描述】:

需要从本地笔记本电脑访问堡垒/跳转服务器后面的 EC2 实例上的 phpMyAdmin。

希望减少使用 .shh/config 的这些步骤。该问题旨在解决正确的配置。

在没有公共堡垒服务器跳过的情况下连接到 EC2 时,这是记录在案的正常方式,在我的情况下不起作用,因为我们的部署使用面向公众的堡垒:

https://docs.bitnami.com/aws/faq/get-started/access-phpmyadmin/

当您需要跳过面向公众的堡垒时,例如:

本地/笔记本电脑 ------> 堡垒/跳转服务器 -----> ec2

以上参考链接不遵循相同的工作流程,文档很少。 为此功能设置入站/出站规则也很少。

首选是使用这样设置的 .ssh/config:

Host bastionHostTunnel
Hostname <publicBastionIp>
User <bastionusername>
ForwardAgent yes
IdentityFile <local path to .pem file>

Host ec2Host
Hostname <privateEC2IP>
User <ec2 username>
ForwardAgent yes
IdentityFile <local path to .pem file>
# -A Enable forwarding of the Authentication agent connection
# -W used on older machines instead of -J to bounce through
# %h the remote hostname
# On Windows 10(only?) seems must call ssh.exe instead of only ssh 
ProxyCommand ssh.exe -A -W %h:22 bastionHostTunnel

我显然在上面的 中遗漏了 vars - 但我有它们并且已经验证了类似的配置可用于使用 FileZilla 启用 SFTP。

然后在 shell 中调用这个来绑定端口 localhost:8888 (http://127.0.0.1:8888):

ssh ec2Host -D 8888

然后应该可以打开浏览器,到下面去访问phpMyAdmin:

http://127.0.0.1:8888/phpmyadmin

当前的问题是这个进程挂起并且可能拒绝连接。这表明上面的配置错误或堡垒和 ec2 实例的入站/出站规则不正确。

这里有没有人遇到过类似的问题并且能够解决并可以进一步分享,非常感谢。加上调试整个过程的任何额外线索将有助于答案。

【问题讨论】:

【参考方案1】:

我很好奇,如果你在命令行中指定所有内容,它是否有效……一旦确定有效,你就可以开始重构以将某些方面放入 .ssh/config。如果一切都在命令行上,我通常更容易发现我的配置错误,而且我不知道我在那里看到了所有正确的转发选项。

除非我弄错了,否则您不需要在 SSH 配置文件中对 ec2 主机进行任何引用,因为您使用跳转机将 localhost 流量重定向到那里,您将无法直接访问使用 SSH 隧道从本地计算机访问 ec2 主机。

有很多方法可以创建隧道,但是当我这样做时,我会使用像 ssh -L 8080:destination:80 -i &lt;keyfile&gt; me@jumpbox 这样的命令。 destination 必须可以从jumpbox 访问,我可以先使用ssh -i &lt;keyfile&gt; jumpbox 进行验证,然后在该机器上使用ssh destination。如果一路上出现问题,调试这些小步骤会更容易(例如,如果我无法通过手动 ssh 连接到 jumpbox,那么我知道隧道将永远无法工作)。

【讨论】:

以上是关于如何通过 SSH 隧道通过 AWS 堡垒/跳转服务器从笔记本电脑访问 phpMyAdmin 到使用 .ssh/config 的 EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

SSH隧道通过Ubuntu堡垒到私有子网中的实例

通过 Ubuntu 堡垒到私有子网中的 EC2 实例的 SSH 隧道

带有 aws SSM 的 SSH 隧道

从 Windows 10 到在 AWS 上运行的 Jupyter 的隧道

如何使用 ssh 隧道将谷歌数据工作室连接到 AWS 上的 postgres 无服务器?

如何通过 ssh 隧道使用 kubectl 通过我的 kubernetes API 访问我的内部 ELB?