2014-02-20 94 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

这是什么类型的转发?远程转发?是否需要任何服务器设置? –