[ssh首先在mysqldb中使用python

问题描述 投票:5回答:3

我正在尝试使用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')

当然是弥补的。任何人都可以提出建议吗?

python mysql ssh mysql-python
3个回答
9
投票

使用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绑定库来为您设置隧道。


19
投票

我更喜欢将隧道保留在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')

0
投票

嗨,我对python有疑问-私有实例的ssh隧道设置,请帮助

© www.soinside.com 2019 - 2024. All rights reserved.