Python使用sshtunnel通过ppk私钥文件连接远程MySQL数据库的方案咨询
sshtunnel 切换为SSH密钥连接调整方案
第一步:转换PPK私钥为OpenSSH格式
sshtunnel 底层依赖paramiko库,原生不支持PuTTY生成的PPK格式私钥,需要先转换格式:
- 打开PuTTYgen,点击「Load」选择你持有的PPK私钥文件,输入私钥密码(如果有设置的话)完成加载
- 点击顶部菜单栏「Conversions」→「Export OpenSSH key」,将导出的文件保存为无后缀的私钥文件(例如
id_rsa)
第二步:调整Python连接代码
只需要修改SSHTunnelForwarder的认证参数即可,删除原有的ssh_password配置,替换为私钥路径配置,修改后的完整代码如下:
import sshtunnel import mysql.connector import numpy as np import pandas as pd host = "" username="" # 原password参数不再需要,删除即可 tunnel_username="" tunnel_password="" # 新增私钥路径配置,如果私钥有密码再加下面这行 # ssh_pkey_password = "你的私钥密码" with sshtunnel.SSHTunnelForwarder( (host, 22), ssh_username=username, # 替换为你导出的OpenSSH格式私钥的本地路径 ssh_pkey="/path/to/your/id_rsa", # 如果私钥有密码,加下面这行配置,没有就删除 # ssh_private_key_password=ssh_pkey_password, remote_bind_address=('localhost', 3306), local_bind_address=('0.0.0.0', 3306) ) as tunnel: connection = mysql.connector.connect( user= tunnel_username, password= tunnel_password, host='localhost', database= database, port=3306) data = pd.read_sql_query(query, connection) connection.close() print(data)
注意事项
- Windows系统下填写私钥路径时,建议使用原始字符串避免转义问题,例如
r"C:\users\xxx\id_rsa" - Linux/macOS系统下需要将私钥文件权限设置为600,执行命令
chmod 600 /path/to/your/id_rsa,否则会报权限错误 - 私钥文件属于敏感信息,不要和代码一起提交到公开仓库,避免泄露
内容的提问来源于stack exchange,提问作者Garrett
相关产品推荐
相关产品推荐

