2016-06-21 108 views
0

我想了解我应该怎么做才能使用SSH连接到远程MySQL服务器。Python使用SSHTunnelForwarder和MySQLdb连接到MySQL服务器

from sshtunnel import SSHTunnelForwarder 

with SSHTunnelForwarder(
     ('192.168.0.60', 22), 
     ssh_password="MySSHPASSWORD", 
ssh_username="MUSSHUserName", 
remote_bind_address=('192.168.0.30', 3306)) as server: 

    conn = MySQLdb.connect(user='UserNameOnSQLSERVER', passwd='PasswordOnSQLSERVER', host='192.168.0.60', db='myDB', 
          port=server.local_bind_port) 

我已经能够与上述配置扔MySQL工作台连接到该服务器,并运行查询和一切伟大的工作

的问题是,当我试图通过这个数据库连接上面的代码中,我不断收到错误:

_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '192.168.0.60' (10060)") 

我也试着更改IP在MySQLdb.connect是

 conn = MySQLdb.connect(user='kiboUser', passwd='[email protected]#kL68', host='192.168.0.60', db='dbKiboDashboard', 
          port=server.local_bind_port) 

,我得到了以下错误:

_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on '192.168.0.30' (10060)") 

可以请人帮助我了解什么即时做错了

感谢

+0

您设置请澄清细节192.168.0.60和MySQL的远程服务器在192.168.0.30上? 2.或者你有192.168.0.60上的ssh代理? 3.尝试使用像ssh -L 3307命令创建ssh tonel:mysql-host-name.com:3306 ssh_user @ ssh_host -A然后通过端口3307上的localhost连接到MySQL? – Taras

+0

1)MySQL服务器是192.168.0.30,我可以通过192.168.0.60达到它 –

+0

什么是你的server.local_bind_port值? – Taras

回答

1

remote_bind_address是要进入隧道的一个。确保验证正在监听的服务器的TCP端口。 为了验证这一点,你可以尝试的命令

netstat

netstat -tln

这应该工作:1.您的本地地址:

with SSHTunnelForwarder(
    ('ServerIP', sshport), #The server's IP and SSH port 
    ssh_password="MySSHPASSWORD", 
    ssh_username="MUSSHUserName", 
    remote_bind_address=('127.0.0.1', 3306)) as server: #The server's TCP IP and port, you're tunneling 

conn = MySQLdb.connect(user='UserNameOnSQLSERVER', passwd='PasswordOnSQLSERVER', host='127.0.0.1', 
         port=server.local_bind_port) #Your TCP IP and port (your end of the tunnel) 
+0

谢谢。它为我工作。 –