SSH端口转发/多跳隧道

时间:2020-04-02 09:06:17

标签: amazon-web-services ssh portforwarding ssh-tunnel

SSH-Tunneling

背景

  • AWS的可用区中存在三个子网。其中两个是私人的,一个是公共的。
  • 公共子网有一个Jumpbox,可以使用一个ssh文件(示例-pem ssh -i my-key-file.pem ec2-user@host1从我的本地计算机连接到该公共子网。 >

  • 第一个专用子网具有一个充当应用程序服务器的EC2实例。只能通过“ ssh”从“大号”中访问它。此处使用相同的pem文件。 (示例-ssh -i my-key-file.pem ec2-user@host2)。此命令在host1上执行。

  • 第二个私有子网使用AWS RDS服务托管一个Oracle实例。它正在端口1521上运行。只能从App Server / host2访问该数据库。

我目前的工作方式

  • host2已安装sqlplus客户端。

  • 首先,我连接到host1,然后连接到host2,然后执行sqlplus以在命令行(无GUI)上执行查询。

    < / li>

我计划使用SQL Developer等GUI工具直接从本地计算机进行连接。我认为使用端口转发/ SSH隧道可以实现。

我尝试使用其他选项,但没有成功。以下链接很有用:

我的SSH隧道方法

  • ssh -N -L 9999:127.0.0.1:1234 ec2-user@host1 -i my-key-file.pem -v -v -v
    • 这是在我的本地计算机上执行的。
    • 它没有什么用,因为我已经可以使用host1连接到ssh。我不知道如何转发许多级别。使用此主机作为我的第一跳。之后,ssh监听端口9999,它是我机器的Local。它将所有流量转发到host1到端口1234我的假设是,如果我在连接到localhost:9999的本地计算机上使用sqlplus,则流量将到达host1:1234
    • 我使用127.0.0.1是因为SSH隧道的目标是相对于SSH服务器host1。基本上, Target SSH服务器都在同一主机上。
  • ssh -N -L 1234:db-host:1521 ec2-user@host2 -i my-key-file.pem -v -v- v

    • 此操作在host1
    • 上执行
    • 此后,ssh使用1234作为隧道,将端口host2上的所有传入流量转发到目标主机(数据库主机)/ 1521。

    • 同样,我的假设是,ssh正在监听1234上的端口host1。使用DB Host作为隧道,将从任何地方到达的所有流量都传递到host2

我执行了两个命令,没有看到任何错误。我使用netstat -tulpn | grep LISTEN验证了哪些端口正在监听。

这两个之后,我的计划是使用主机名localhost和端口号9999连接到数据库。

出了什么问题!

  • 但是,当我尝试从本地计算机连接到数据库时,从SQL客户端 Got减去读取调用中的一个错误。我无法理解ssh日志中的调试消息。

我相信我对端口转发工作原理的理解可能不正确。任何输入都会有所帮助。 谢谢您的时间!

0 个答案:

没有答案