python开发包之远程隧道链接sshtunnel

缘起:

       公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板进行数据库的链接.同样Navicat也是支持这种操作的.但是开发中也要这种处理方式就需要sshtunnel包的辅助

 

github: https://github.com/pahaz/sshtunnel

 

 

安装:

pip install sshtunnel

 

使用:

import pymysql
import traceback
from loguru import logger
from sshtunnel import SSHTunnelForwarder

ssh_config=

{
'ssh': ('x.x.x.x', 22),
'username': 'x',
'password': 'x',
},
'mysql_config': {
'mysql': ('xx.xx.xx.xx', 3306),
'user': 'xx',
'passwd': 'xx',
}
}


with SSHTunnelForwarder( ssh_address_or_host
=ssh_config['ssh'], # 远程登录服务器的ip和端口(元组表示) ssh_username=ssh_config['username'], # 登录用户名 ssh_password=ssh_config['password'], # 登录密码 remote_bind_address=mysql_config['mysql'] # mysql的ip+端口 ) as server: conn_config = dict( host='127.0.0.1', # 一般是固定 port=server.local_bind_port, # 端口保持一致 user=mysql_config['user'], # mysql的用户名 passwd=mysql_config['passwd'], # mysql的密码 ) try: conn = pymysql.connect(**conn_config) with conn.cursor(pymysql.cursors.DictCursor) as cursor: sql = 'SELECT VERSION()' cursor.execute(sql) res = cursor.fetchone() logger.info('Connect Success. result: {}'.format(res)) except Exception: logger.error('Connect Error. msg: {}'.format(traceback.format_exc()))

 

posted @ 2022-03-11 10:21  X-Wolf  阅读(887)  评论(1编辑  收藏  举报