python - 使用 SSHTunnelForwarder 通过 SSH 连接到 MySQL 数据库

标签 python mysql ssh mysql-python

我试图在 python 中通过 ssh 连接到 mysql 数据库,但出现错误。我将以下内容保存在 python 文件“forward.py”中。我的代码如下:

前向.py

from sshtunnel import SSHTunnelForwarder
import MySQLdb

with SSHTunnelForwarder(
      ('ssh_host', 22),
      ssh_password="ssh_password",
      ssh_username="ssh_username",
      remote_bind_address=('mysql_host', 3306)) as server:

     con = MySQLdb.connect(user='mysql_username',passwd='mysql_password',db='mysql_db_name',host='mysql_host',port=server.local_bind_port)

当我在终端中运行 forward.py 时,我收到以下错误:

_mysql_exceptions.OperationalError: (2003, "Can't connect to MySQL server on     
'mysql_host' (60)")

值得注意的是,这些值是安全的硬编码值,即“mysql_host”是一个实际的主机,我可以在运行时通过 ssh 访问它

ssh mysql_host

通过终端。我也可以使用具有相同值的 Sequel Pro 连接得很好,按照:http://screencast.com/t/0niuWlMDb

谁能指出我正确的方向?提前致谢

最佳答案

我认为您的问题在于您正在创建本地 SSH 隧道但试图直接连接到远程主机,这违背了使用 SSH 隧道的目的。

我相信,如果您将连接字符串从 host='mysql_host' 更改为 host='127.0.0.1',您就会解决问题。

如果您查看 Sequel Pro 实例的调试/连接设置,您将看到正在使用的实际连接命令,并希望确认情况确实如此。

有关 SSH 转发的更多引用资料: http://blog.trackets.com/2014/05/17/ssh-tunnel-local-and-remote-port-forwarding-explained-with-examples.html

关于python - 使用 SSHTunnelForwarder 通过 SSH 连接到 MySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37980493/

相关文章:

php - 两个脚本之间的通信

python - 使用 Pygame 在 Python 中创建多个子弹的最佳方法是什么?

python - Matplotlib:3D trisurf 图中的 ax.format_coord() - 返回 (x,y,z) 而不是(方位角,仰角)?

php - SQL INSERT INTO SELECT 语句

MySQL 在两台相同服务器上执行的一个查询使用不同的索引

php - 如果选中复选框,则删除多行

git - SmartGit 不会使用 ssh 进行身份验证

python:拆分字符串而不丢弃任何内容

unix - 通过ssh传递带有转义双引号的变量

git - 如何为两个 GitLab 帐户设置两个 SSH key 并使用 TortoiseGit 进行推送/pull ?