我使用以下步骤手动连接到我的数据库:
1>load a putty session with ip 1.1.1.1 and port 1111
2>login as: login1
3>login1@1.1.1.1's password: pwd1
4>[login1@G ~]$ ssh login1@2.2.2.2
5>[login1@l ~]$ MySQL -h 3.3.3.3 -u login2 -p'pwd2' -D mydb
现在我可以成功查询任何内容,例如select * from my_table。
我有一个python selenium webdriver代码,我想要读取我的数据库。由于ssh隧道和3个IP涉及,我无法实现它。
from sshtunnel import SSHTunnelForwarder
import MySQLdb
with SSHTunnelForwarder(
('host', 1111),
ssh_password="pwd1
ssh_username="login1",
remote_bind_address=('2.2.2.2', 1111)) as server:
con = None
con = MySQLdb.connect(user='login2',passwd='pwd2',db='mydb',host=3.3.3.3,port=3306)
cur = con.cursor()
我收到此错误:
答案 0 :(得分:1)
实例化SSHTunnelForwarder
时:
参数host
是您的远程ssh 2.2.2.2
remote_bind_address
的参数将用于隧道,端口是您要隧道的端口,因此您的mysql端口。 ('3.3.3.3', 3306)
然后当连接到mysql时,您希望它通过隧道来访问mysql实例。隧道端口为server.local_bind_port
。
from sshtunnel import SSHTunnelForwarder
import MySQLdb
with SSHTunnelForwarder(
('2.2.2.2', 1111),
ssh_password="pwd1"
ssh_username="login1",
remote_bind_address=('3.3.3.3', 3306)) as server:
con = MySQLdb.connect(
user='login2',passwd='pwd2',
db='mydb',host=1.1.1.1,
port=server.local_bind_port)