使用SSH tunnel访问内网的MySQL

文章目录

注:本文是使用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,但有两个问题:

  1. jumpserver是Linux,只有命令行,因此无法使用图形工具(比如MySQL Workbench)。
  2. 在本地(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.xxx3306 端口。

接下来,只需在Windows端,用MySQL client工具(比如MySQL Workbench)连接本地( 127.0.0.1 )的 3306 端口,就能通过SSH tunnel到达jumpserver,并且被jumpserver转发到内网的MySQL实例(即 172.17.xxx.xxx3306 端口)。

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
相关推荐
武子康6 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
vdoi8 小时前
【Mysql】 Mysql zip解压版 Win11 安装备忘
数据库·mysql
泰勒疯狂展开9 小时前
Linux研学-MySQL安装
linux·mysql·adb
float_六七10 小时前
MySQL索引背后的B+树奥秘
数据库·b树·mysql
贺贺丿14 小时前
Docker4-容器化企业级应用
linux·nginx·docker·云原生·eureka·tomcat·ssh
彦楠15 小时前
win通过OpenSSL生成.ssh id_rsa密钥方法
运维·ssh
火凤凰--凤凰码路18 小时前
MySQL 中的“双路排序”与“单路排序”:原理、判别与实战调优
android·数据库·mysql
过客随尘19 小时前
Mysql RR事务隔离级别引发的生产Bug,你中招了吗?
后端·mysql
知其然亦知其所以然19 小时前
社招 MySQL 面试官问我:InnoDB 的 4 大特性?我靠这 4 个故事一战封神!
后端·mysql·面试
m0_5642641820 小时前
开源数据库E-R图绘制工具分享
数据库·经验分享·mysql·e-r图·开源工具