今天解决了一个问题
平时都是使用python连接内网数据库
今天想在灰度进行测试,需要连接外网数据库
需要使用跳板机进行连接
直接上配置:
- import sshtunnel
- import pymysql
-
- # sshtunnel.TUNNEL_TIMEOUT = 6000000
-
- class SSH_to_Mysql:
- def ssh_mysql_conn(self):
- self.server = sshtunnel.SSHTunnelForwarder(
- ('跳板机IP', int(跳板机端口)),
- ssh_username='跳板机用户名',
- ssh_password='跳板机密码',
- remote_bind_address=('数据库IP', int(数据库端口))
- )
-
- self.server.start()
-
- # self.server.set_keepalive
- # self.server.ping(reconnect=True)
-
- self.conn = pymysql.connect(
- host = '127.0.0.1',
- port = self.server.local_bind_port,
- user = '数据库用户名',
- password = '数据库密码',
- # db = xxx
- charset="utf8",
- cursorclass=pymysql.cursors.DictCursor,
- autocommit=1
- )
-
- return self.conn
总结:
1. 我的跳板机是通过密码连接的,所以使用的是:ssh_password 如果跳板机是通过密钥连接,则需要ssh_pkey参数,值是密钥的路径
2. SSHTunnelForwarder方法返回的server对象必须调用start()方法后才可以正常使用
3. 在连接MySQL时,connect()方法的参数中的host必须为127.0.0.1
4. 由于端口必须为数字类型,所以使用int()方法转换
5. 使用结束后,为了安全起见,调用server的close()方法关闭连接,当然也可以使用with语句,此时不仅可以省略close()方法,也可以省略start()方法