![通过多个隧道访问 MySQL 实例](https://linux22.com/image/801920/%E9%80%9A%E8%BF%87%E5%A4%9A%E4%B8%AA%E9%9A%A7%E9%81%93%E8%AE%BF%E9%97%AE%20MySQL%20%E5%AE%9E%E4%BE%8B.png)
我有一个 MySQL 实例在一台服务器上运行,我无法直接访问,只能通过另一台服务器访问,所以我必须像这样访问它:
[local] --> [server1] --> [server2]
我应该使用哪个命令来执行此操作?我尝试了所有方法,但似乎在第一个命令上就停止了。
这是我尝试过的命令之一:
ssh -N -p 22 -c 3des [email protected] -L 3306/1.1.1.1/3310 -R 3310/2.2.2.2/3306
1.1.1.1->服务器1
2.2.2.2->服务器2
提前致谢
答案1
让我们分解一下
-N
我假设你不想执行远程命令,否则你可以这样做
ssh -t [email protected] "ssh [email protected]"
然后-p 22 -c 3des
端口并明确选择一个密码
本地绑定-L 3306/1.1.1.1/3310
转换为 local-port:remote-host:remote-port
到目前为止,您正在连接并将[email protected]
您机器上的端口 3306 绑定到 1.1.1.1 上的 3310。
-R
作用与 完全相反-L
。您可以远程绑定端口,因此当您连接到该远程主机端口时,实际上是在本地进行连接。
至少有两种方法可以做到这一点。要么然后, 要么检查ssh -f -N [email protected] -L 3306:2.2.2.2:3310
ssh myUser@localhost -p 3306
ssh_配置并添加类似这样的内容
Host 1.1.1.1
HostName 1.1.1.1
User myUser
LocalForward 3306 127.0.0.1:3310
答案2
如果你的 MySQL 正在运行server2
,你可以尝试:
ssh -L 3306:2.2.2.2:3306 1.1.1.1
这将在您本地的 3306 端口和 3306 端口之间建立隧道server2
。
然后您连接到localhost
您的 MySQL 客户端。