首先使用python中的mysqldb实现ssh
我正在尝试使用python中的MySQLdb连接到远程服务器上的MySQL数据库。问题是,首先我需要SSH连接到主机,然后从主机连接到MySQL服务器。不过,我遇到的问题是,MySQLdb似乎没有在连接到SQL服务器之前建立SSH连接的方法。我查过文件了,但运气不好 这就是我连接的方式:首先使用python中的mysqldb实现ssh,python,mysql,ssh,mysql-python,Python,Mysql,Ssh,Mysql Python,我正在尝试使用python中的MySQLdb连接到远程服务器上的MySQL数据库。问题是,首先我需要SSH连接到主机,然后从主机连接到MySQL服务器。不过,我遇到的问题是,MySQLdb似乎没有在连接到SQL服务器之前建立SSH连接的方法。我查过文件了,但运气不好 这就是我连接的方式: conn = MySQLdb.connect(host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbna
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 user@host.com -L 9990:localhost:3306
在这里,您的本地端口9990将绑定到远程主机上的3306,-L表示本地,那么9990:localhost:3306表示本地端口:
conn=MySQLdb.connect(主机='mysqlhost.domain.com:9990',用户='user',密码='password',数据库='dbname')
请注意9990
将您的用户公钥ssh添加到host.com,这样您就不必在每次设置隧道时键入密码(使用公钥身份验证)
如果您需要在python中执行此操作,可以在python中调用python到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')
试着做一个SSH隧道谢谢。这就成功了。我不得不使用127.0.0.1而不是localhost,以防其他人遇到类似问题。如果远程主机上的mysql db是amazon rdsin sshhost.domain.com,则需要进行哪些更改?您必须使用要连接的SSH机器,该机器可以查看RDS,然后将mysqlhost.domain.com更改为RDS.db.domain.com。应该是这样的。这是迄今为止解决这个问题的最佳答案。我被困了4天,直到我遇到这个解决方案!回答得很好!我只是想补充一点,如果您愿意,您也可以使用pymysql而不是MySQLdb进行连接。其他一切都一样:)谢谢,伙计!