今天解决了一个问题
平时都是使用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()方法