2014-02-20 98 views
8

我使用MySqldb與Python 2.7允許正常連接這樣的Python來做出另一個MySQL服務器的連接啓用的Python通過SSH隧道連接到MySQL

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

相反,如何能連接進行通過使用SSH密鑰對的SSH隧道?

SSH隧道理想情況下應該由Python打開。 SSH隧道主機和MySQL服務器是同一臺機器。

+0

您是谷歌嗎?用python打開ssh隧道:http://stackoverflow.com/questions/4364355/how-to-open-an-ssh-tunnel-using-python,通過上述隧道連接到MySql:http://stackoverflow.com/問題/ 3577555/ssh-tunnel-for-python-mysqldb-connection – mbatchkarov

+0

您可能有充分的理由使用SSH,但如果這是直接連接到MySQL服務器,請改用SSL。更少的事情可以出錯。 – geertjanvdk

+0

@geertjanvdk這很有趣,爲什麼SSL會是更好的選擇?我期望在客戶端和服務器之間建立安全的連接,並且SSH是第一個想到的 – Nyxynyx

回答

7

我猜你需要端口轉發。我推薦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

我想在remote_bind_address中放什麼?我在哪裏可以找到這些信息? –

+0

如果你在你的本地,你可以嘗試這樣的:'_remote_bind_address ='127.0.0.1' _local_bind_address ='0.0.0.0'' –

+0

這是什麼類型的轉發?遠程轉發?是否需要任何服務器設置? –