Python通过SSH连接MySQL

因为项目的特殊性,数据库只允许内网访问&服务器公网SSH访问,需要本地机器A通过SSH登录到目标机器B上,访问该B中的MySQL。搜寻了一圈,大部分的内容都是教如何在本地机器A,通过SSH连接到跳板机B,然后访问C机器的MySQL。所以记录一下我的实现方法。

需要用到的两个Python libs:pymysqlsshtunnel

不通过SSH连接数据库

1
2
3
4
5
conn = pymysql.connect(host=localDbConfig.MYSQL_IP,
port=localDbConfig.MYSQL_PORT,
user=localDbConfig.MYSQL_USERNAME,
password=localDbConfig.MYSQL_PASSWORD,
database=localDbConfig.DB_NAME)

通过SSH连接数据库

首先需要建立一个SSH隧道,然后就和上面一样去连接即可

1
2
3
4
5
6
7
8
9
10
11
with SSHTunnelForwarder(
(remoteDbConfig.IP, remoteDbConfig.PORT),
ssh_username=remoteDbConfig.USERNAME,
ssh_password=remoteDbConfig.PASSWORD,
remote_bind_address=(remoteDbConfig.MYSQL_IP, remoteDbConfig.MYSQL_PORT),
local_bind_address=('0.0.0.0', remoteDbConfig.MYSQL_PORT)) as server:
conn = pymysql.connect(host=remoteDbConfig.MYSQL_IP,
port=remoteDbConfig.MYSQL_PORT,
user=remoteDbConfig.MYSQL_USERNAME,
password=remoteDbConfig.MYSQL_PASSWORD,
database=remoteDbConfig.MYSQL_DB_NAME)

这里要注意的就是,在建立SSH隧道的时候,需要绑定一个远程的地址,由于我们的MySQL数据库是在B机器中,所以MySQL的MYSQL_IdP就是127.0.0.1。这样就可以连接上。

REF:

-------------The End-------------
请我喝一杯啤酒~