我试图mysql-workbench
在本地机器上运行,并通过 连接到远程机器ssh
。如果远程机器正在监听端口 3306,那么这将很简单:
ssh -L 1234:localhost:3306 [email protected]
这将允许我指向mysql-workbench
并且localhost:1234
所有流量都将被路由到example.com:3306
。
但是,上的数据库example.com
只监听localhost:3306
。有没有办法example.com:localhost:3306
通过端口转发回我的机器?我有nc
和ncat
,所以我认为应该可以设置一个临时代理,但我不知道相当知识。
答案1
你的解释有点奇怪,你的例子应该仍然有效,因为你所说的是:“当我本地机器上的流量指向 TCP 端口 1234 时,通过这个隧道发送它,制造另一端的机器将其发送到解析为 localhost 的任何 IP 地址在远程机器上并将其发送到该机器的端口 3306。如果您输入了 :remote2.example.com:,那么您要 ssh 连接的机器会将数据包发送到 remote2.example.com 解析到的任何位置。例如,假设我有三个 shell,我有一台本地机器和一台远程机器:
[@local 1]$ ssh -L8888:localhost:7777 remote
[@remote 2]$ nc -l -s 127.0.0.1 -p 7777
[@local 3]$ echo 'Hello World!' | nc localhost 8888
将使@local 1
shell 输出“Hello World!”。也许远程服务并没有真正监听远程机器上解析到的 localhost?
答案2
从您的描述中无法清楚看出哪里出了问题以及您想要做什么。一旦您可以通过“简单” ssh 隧道连接到您的服务器,您就可以连接到远程计算机的环回接口,即 localhost:3306。默认情况下,数据库服务器正在监听环回接口。尝试使用显式环回 IP 地址连接到远程计算机:
ssh -L 127.0.0.1:1234:127.0.0.1:3306 [email protected]
它应该可以在 netcat 等中正常工作。如果不行,则说明您的数据库服务器配置有问题。