Python通过SSH连接MySQL
因为项目的特殊性,数据库只允许内网访问&服务器公网SSH访问,需要本地机器A通过SSH登录到目标机器B上,访问该B中的MySQL。搜寻了一圈,大部分的内容都是教如何在本地机器A,通过SSH连接到跳板机B,然后访问C机器的MySQL。所以记录一下我的实现方法。
需要用到的两个Python libs:pymysql和sshtunnel。
不通过SSH连接数据库
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隧道,然后就和上面一样去连接即可
with SSHTunnelForwarder(
(remoteDbConfig.IP, remoteDbConfig.PORT),
ssh_username=remoteDbConfig.USERNAME,
ssh_password=remoteDbConfig.PASSWORD,
remote_bind_address=(remoteDbConfig.MYSQL_IP, remoteDbConfig.MYSQL_PORT)) as server:
conn = pymysql.connect(host=remoteDbConfig.MYSQL_IP,
port=server.local_bind_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: