rjf*_*rjf 5 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 = 'dbname')
Run Code Online (Sandbox Code Playgroud)
但我真正需要的是这样的:
conn = MySQLdb.connect(sshhost = 'sshhost.domain.com', sshuser = 'sshusername', sshpasswd = 'sshpasswd', host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbname')
Run Code Online (Sandbox Code Playgroud)
这当然只是弥补了.有人可以提出任何建议吗?
jsj*_*sjc 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')
Run Code Online (Sandbox Code Playgroud)
在使用MySQLdb.connect之前设置ssh隧道.隧道将使它看起来好像你在本地运行mysql,设置类似这样的东西
ssh user@host.com -L 9990:localhost:3306
Run Code Online (Sandbox Code Playgroud)
这里你的本地端口9990将绑定到远程主机上的3306,-L代表本地,然后9990:localhost:3306表示LOCALPORT:
康恩= MySQLdb.connect(主机= 'mysqlhost.domain.com:9990',用户= '用户',passwd中= '密码',分贝= 'DBNAME')
注意9990.
将用户的公共ssh密钥添加到host.com,这样您每次要设置隧道时都不必键入密码(使用公钥认证).
如果你需要在python中执行此操作,可以在python中调用python-to-ssh绑定库来为您设置隧道.
| 归档时间: |
|
| 查看次数: |
9797 次 |
| 最近记录: |