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

需要用到的两个Python libs:pymysqlsshtunnel

不通过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: