缘起: 公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板
缘起:
公司很多的数据库的链接都是本地连接或者指定ip地址可以访问, 如果你没有该ip权限, 但是你可以登录该数据库所在的服务器, 这个时候就可以使用ssh链接上这个服务器,以此为跳板进行数据库的链接.同样Navicat也是支持这种操作的.但是开发中也要这种处理方式就需要sshtunnel包的辅助
github: https://github.com/pahaz/sshtunnel
安装:
pip install sshtunnel
使用:
import pymysqlimport traceback
from loguru import logger
from sshtunnel import SSHTunnelForwarder
{
'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()))