文章目录
注:本文是使用SSH tunnel做端口转发的一个示例。有关SSH端口转发,可参考我的几篇文档
https://blog.csdn.net/duke_ding2/article/details/106878081
https://blog.csdn.net/duke_ding2/article/details/135627263
https://blog.csdn.net/duke_ding2/article/details/107108962
环境
- Windows 11 专业版
- CentOS 7.9
- MySQL 8.0.34
背景
MySQL实例位于内网,其IP地址为 172.17.xxx.xxx
,端口是默认的 3306
。
jumpserver(CentOS)既有公网地址 8.140.xxx.xxx
,也有内网IP地址,可以从内网连接到MySQL。一般我们就在jumpserver上连接MySQL,但有两个问题:
- jumpserver是Linux,只有命令行,因此无法使用图形工具(比如MySQL Workbench)。
- 在本地(Windows)开发时,需要连接数据库,方便测试和调试。
网络连通性如下:
powershell
Windows ====> jumpserver ====> MySQL
(公网) (内网)
现在的需求是,希望能够从本地Windows端,连接到MySQL实例。
方法
这里需要建立一个反向代理,而使用SSH tunnel是一个简单方便的解决办法。
关于如何使用 ssh
命令建立tunnel,以及正向代理和反向代理的概念,这里不再赘述。
解决办法其实很简单,只需在本地(Windows端)运行如下命令:
powershell
ssh -L 3306:172.17.xxx.xxx:3306 jumpserver -N
该命令建立了一个从Windows到jumpserver的正向tunnel(tunnel的方向和ssh的方向是一致的)。具体说来就是:jumpserver(tunnel的服务器端)会把Windows(tunnel的客户端)的 3306
端口的请求转发到 172.17.xxx.xxx
的 3306
端口。
接下来,只需在Windows端,用MySQL client工具(比如MySQL Workbench)连接本地( 127.0.0.1
)的 3306
端口,就能通过SSH tunnel到达jumpserver,并且被jumpserver转发到内网的MySQL实例(即 172.17.xxx.xxx
的 3306
端口)。
MySQL Workbench配置如下:

接下来就可以愉快的玩耍了。
同理,如果要在本地调试代码(比如Python代码,使用 pymysql
连接数据库),需指定host为 127.0.0.1
:
python
import pymysql
from pymysql.cursors import DictCursor
......
# 建立数据库连接
connection = pymysql.connect(
host='127.0.0.1', # 数据库地址
user='xxx', # 用户名
password='xxx', # 密码
database='xxx', # 数据库名
charset='utf8mb4', # 字符编码
cursorclass=DictCursor
)
参考
https://blog.csdn.net/duke_ding2/article/details/106878081
https://blog.csdn.net/duke_ding2/article/details/135627263
https://blog.csdn.net/duke_ding2/article/details/107108962