使用 sshtunnel 和 SSH ppk 密钥文件查询 MySQL 数据库 Python
Query MySQL database with Python using sshtunnel, with SSH ppk key file
我已经能够使用密码通过以下代码通过 sshtunnel 进入远程数据库
import sshtunnel
import mysql.connector
import numpy as np
import pandas as pd
host =""
username=""
password=""
tunnel_username=""
tunnel_password=""
with sshtunnel.SSHTunnelForwarder(
(host, 22),
ssh_username=username,
ssh_password=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)
但是,情况发生了变化,我被迫只能通过 SSH 密钥(使用 PuTTYgen 生成)进行连接。话虽这么说,我有私钥(ppk 文件),但不清楚我需要做什么(或者如果可能的话)让下面的代码再次工作。
我没有看到引用 ppk 文件路径而不是 sshtunnel 密码的选项。
使用 SSHTunnelForwarder
constructor 的 ssh_pkey
参数提供私钥文件的路径。
并且您需要将私钥文件转换为 OpenSSH 格式,因为 Paramiko(由 sshtunnel 使用)不支持 PuTTY 密钥格式。
参见 How to ssh connect through python Paramiko with ppk public key
我已经能够使用密码通过以下代码通过 sshtunnel 进入远程数据库
import sshtunnel
import mysql.connector
import numpy as np
import pandas as pd
host =""
username=""
password=""
tunnel_username=""
tunnel_password=""
with sshtunnel.SSHTunnelForwarder(
(host, 22),
ssh_username=username,
ssh_password=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)
但是,情况发生了变化,我被迫只能通过 SSH 密钥(使用 PuTTYgen 生成)进行连接。话虽这么说,我有私钥(ppk 文件),但不清楚我需要做什么(或者如果可能的话)让下面的代码再次工作。
我没有看到引用 ppk 文件路径而不是 sshtunnel 密码的选项。
使用 SSHTunnelForwarder
constructor 的 ssh_pkey
参数提供私钥文件的路径。
并且您需要将私钥文件转换为 OpenSSH 格式,因为 Paramiko(由 sshtunnel 使用)不支持 PuTTY 密钥格式。
参见 How to ssh connect through python Paramiko with ppk public key