2014-02-20 8 views
8

ich MySqldb mit Python bin 2.7 Python zu ermöglichen, um Verbindungen zu einem anderen MySQL-ServerPython Aktivieren via SSH Tunneling zu MySQL verbinden

import MySQLdb 
db = MySQLdb.connect(host="sql.domain.com", 
    user="dev", 
     passwd="*******", 
     db="appdb") 

Statt verbindet normalerweise wie diese, wie kann die Verbindung hergestellt werden durch einen SSH-Tunnel mit SSH-Schlüsselpaaren?

Der SSH-Tunnel sollte idealerweise von Python geöffnet werden. Der SSH-Tunnel-Host und der MySQL-Server sind die gleichen Rechner.

+0

Haben Sie google? Öffnen eines SSH-Tunnels mit Python: http://stackoverflow.com/questions/4364355/how-to-open-an-ssh-tunnel-using-python, Verbindung zu MySql über diesen Tunnel: http://stackoverflow.com/ Fragen/3577555/ssh-tunnel-for-python-mysqldb-connection – mbatchkarov

+0

Sie haben wahrscheinlich guten Grund, SSH zu verwenden, aber wenn dies eine direkte Verbindung zu einem MySQL-Server ist, verwenden Sie stattdessen SSL. Weniger Dinge, die schiefgehen können. – geertjanvdk

+0

@geertjanvdk Das ist interessant, warum wäre SSL die bessere Wahl? Ich suche sichere Verbindungen zwischen Client und Server und SSH war der Erste, der mir in den Sinn kam – Nyxynyx

Antwort

7

Ich schätze, Sie brauchen Portweiterleitung. Ich empfehle 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) 
    ... 
+0

Was soll ich in remote_bind_address einfügen? Wo finde ich diese Informationen? –

+0

Wenn Sie in Ihrer lokalen Umgebung sind, können Sie Folgendes versuchen: '_remote_bind_address = '127.0.0.1' _local_bind_address = '0.0.0.0'' –

+0

Welche Art von Weiterleitung ist das? Remote-Weiterleitung? Braucht ein Server-Setup? –