我正在尝试使用python中的MySQLdb连接到远程服务器上的MySQL数据库。问题是,首先我需要SSH进入主机,然后从那里开始,我需要连接到MySQL服务器。我遇到的问题是,MySQLdb在连接到SQL Server之前似乎没有建立SSH连接的方法。我已经检查过文档,但是还没有运气。
这是我的联系方式:
conn = MySQLdb.connect(host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbname')
但是我真正需要的是这样的东西:
conn = MySQLdb.connect(sshhost = 'sshhost.domain.com', sshuser = 'sshusername', sshpasswd = 'sshpasswd', host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbname')
当然是弥补的。任何人都可以提出建议吗?
使用MySQLdb.connect之前,请先设置ssh隧道。隧道将使其看起来好像您在本地运行mysql一样,将其设置为类似的内容
ssh [email protected] -L 9990:localhost:3306
这里您的本地端口9990将绑定到远程主机上的3306,-L代表本地,那么9990:localhost:3306表示LOCALPORT:
conn = MySQLdb.connect(host ='mysqlhost.domain.com:9990',user ='user',passwd ='password',db ='dbname')
注意9990。
将您的用户公共ssh密钥添加到host.com,这样您就不必在每次想要设置隧道时都使用密码(使用公共密钥身份验证)。
如果您需要在python中执行此操作,则可以在python中调用python-to-ssh绑定库来为您设置隧道。
我更喜欢将隧道保留在python代码中,我讨厌手动或单独创建隧道,这要感谢sshtunnel库的使用非常简单。
这里有一些简单的示例,可以满足您的需求。
import MySQLdb
from sshtunnel import SSHTunnelForwarder
with SSHTunnelForwarder(
('sshhost.domain.com', 22),
ssh_password="sshpasswd",
ssh_username="sshusername",
remote_bind_address=('mysqlhost.domain.com', 3306)) as server:
conn = MySQLdb.connect(host='127.0.0.1',
port=server.local_bind_port,
user='user',
passwd='password',
db='dbname')
嗨,我对python有疑问-私有实例的ssh隧道设置,请帮助