2012-10-20 62 views
2

我試圖連接到從我的本地(窗口)我的服務器和訪問MySQL數據庫Python的 - SSH隧道設置和MySQL數據庫訪問

隨着下面的代碼通過膩子建立SSH隧道,我不能夠訪問MySQL數據庫的 。

con = None 
con = mdb.connect(user='user',passwd='password',db='database',host='127.0.0.1',port=3308) 
cur = con.cursor() 

有了下面的代碼,我使用的paramiko設置SSH隧道是成功的,但我不能夠連接到MySQL數據庫

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('host', username='username', password='password') 

con = None 
con = mdb.connect(user='user',passwd='password',db='database',host='127.0.0.1',port=3308) 
cur = con.cursor() 

Error: 
Error 2003: Can't connect to MySQL server on '127.0.0.1' (10061) 

我必須改變MySQL的連接字符串設置使用paramiko訪問MySQL數據庫如果不是,我需要爲paramiko添加參數來模擬像putty這樣的SSH隧道設置。

回答

4

可以使用sshtunnel包裝器的paramiko並節省您的頭痛;)

from sshtunnel import SSHTunnelForwarder 
import MySQLdb 

with SSHTunnelForwarder(
     ('host', 22), 
     ssh_password="password", 
     ssh_username="username", 
     remote_bind_address=('127.0.0.1', 3308)) as server: 

    con = None 
    con = mdb.connect(user='user',passwd='password',db='database',host='127.0.0.1',port=server.local_bind_port) 
    cur = con.cursor() 
+3

啊,這一個工作。如果你使用的是id_rsa,只需用'ssh_private_key = PATH_TO_id_rsa'替換'ssh_password'參數即可! –

+0

是的!那是另一種選擇;) – jsjc

+0

什麼是mdb?我有一個錯誤,說「mdb未定義」。在替換爲「MySQLdb」(只是一個猜測)後,我知道有一個錯誤:「文件」C:\ Python27 \ lib \ site-packages \ MySQLdb \ cursors.py「,第202行,執行 self.errorhandler自我,exc,值) 文件「C:\ Python27 \ lib \ site-packages \ MySQLdb \ connections.py」,第36行,在defaulterrorhandler中 raise errorclass,errorvalue _mysql_exceptions.OperationalError :(2006,'MySQL server has gone ')' – 62mkv