2016-06-21 73 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

謝謝。它爲我工作。 –

相關問題