J'utilise MySqldb
avec Python 2.7 pour permettre à Python de se connecter à un autre serveur MySQL
import MySQLdb
db = MySQLdb.connect(Host="sql.domain.com",
user="dev",
passwd="*******",
db="appdb")
Au lieu de vous connecter normalement comme cela, comment établir une connexion via un tunnel SSH à l'aide de paires de clés SSH?
Le tunnel SSH devrait idéalement être ouvert par Python. L'hôte du tunnel SSH et le serveur MySQL sont la même machine.
Je suppose que vous aurez besoin d'une redirection de port. Je recommande sshtunnel.SSHTunnelForwarder
import mysql.connector
import sshtunnel
with sshtunnel.SSHTunnelForwarder(
(_Host, _ssh_port),
ssh_username=_username,
ssh_password=_password,
remote_bind_address=(_remote_bind_address, _remote_mysql_port),
local_bind_address=(_local_bind_address, _local_mysql_port)
) as tunnel:
connection = mysql.connector.connect(
user=_db_user,
password=_db_password,
Host=_local_bind_address,
database=_db_name,
port=_local_mysql_port)
...
Seulement cela a fonctionné pour moi
import pymysql
import paramiko
import pandas as pd
from paramiko import SSHClient
from sshtunnel import SSHTunnelForwarder
from os.path import expanduser
home = expanduser('~')
mypkey = paramiko.RSAKey.from_private_key_file(home + pkeyfilepath)
# if you want to use ssh password use - ssh_password='your ssh password', bellow
sql_hostname = 'sql_hostname'
sql_username = 'sql_username'
sql_password = 'sql_password'
sql_main_database = 'db_name'
sql_port = 3306
ssh_Host = 'ssh_hostname'
ssh_user = 'ssh_username'
ssh_port = 22
sql_ip = '1.1.1.1.1'
with SSHTunnelForwarder(
(ssh_Host, ssh_port),
ssh_username=ssh_user,
ssh_pkey=mypkey,
remote_bind_address=(sql_hostname, sql_port)) as tunnel:
conn = pymysql.connect(Host='127.0.0.1', user=sql_username,
passwd=sql_password, db=sql_main_database,
port=tunnel.local_bind_port)
query = '''SELECT VERSION();'''
data = pd.read_sql_query(query, conn)
conn.close()
Paramiko est le meilleur module python pour la tunnelisation ssh. Découvrez le code ici: https://github.com/paramiko/paramiko/blob/master/demos/forward.py
Comme indiqué dans les commentaires, celui-ci fonctionne parfaitement . Tunnel SSH pour la connexion MySQLdb à Python