SSH隧道可以在终端上工作,但不能在Python上工作?

SSH隧道可以在终端上工作,但不能在Python上工作?,python,sql,ssh,ssh-tunnel,Python,Sql,Ssh,Ssh Tunnel,我尝试使用以下代码从我的计算机终端执行SSH隧道到服务器 ssh -L 3306:192.168.0.xx:41xx -p 2220 root@xxx.85.63.xxx 然后,我使用以下命令访问了内部数据库(MySQL) mysql -u username -h 192.168.0.xx -P 41xx -p 它成功了。但是当我尝试使用python执行它时,我无法使它工作。我总是犯以下错误 OperationalError: (1045, "Access denied for user '

我尝试使用以下代码从我的计算机终端执行SSH隧道到服务器

ssh -L 3306:192.168.0.xx:41xx -p 2220 root@xxx.85.63.xxx
然后,我使用以下命令访问了内部数据库(MySQL)

mysql -u username -h 192.168.0.xx -P 41xx -p
它成功了。但是当我尝试使用python执行它时,我无法使它工作。我总是犯以下错误

OperationalError: (1045, "Access denied for user 'username'@'localhost' (using password: YES)")
到目前为止,我的代码如下所示

from sshtunnel import SSHTunnelForwarder

with SSHTunnelForwarder(
         ('xxx.85.63.xxx', 2220),
         ssh_password="psswd",
         ssh_username="root",
         remote_bind_address=('192.168.0.xx', 41xx)) as server:

    conn = MySQLdb.connect(host='localhost',
                           port=server.local_bind_port,
                           user='username',
                           passwd='passwd',
                           db='dbname')
我要做的是访问服务器内部的数据库,并执行通常的数据库操作过程


老实说,我对SSH或SSH隧道并不太熟悉,所以我在这里几乎不知所措。有人能指出我该做什么吗?提前谢谢。

我相信您已经正确设置了端口转发

这是一个MySQL权限问题,由“拒绝访问”表示

MySQL根据user@host. 你正在连接为username@localhost,而用户可能只设置为username@192.168.0.xx.

要想知道我是否正确,
在登录SSH主机时尝试mysql-u username-h localhost-p 41xx-p
。我想它可能不会让你进来

我想看看“用户名”@“本地主机”的
显示授权并将特权授予username@localhost或用户名@%或删除限制性权限


祝你好运。

谢谢你的回复。它实际上允许我使用
mysql-u username-h localhost-P 41xx-P
命令。但一旦我加入,我就使用了“用户名”@“本地主机”的
SHOW授权它说它不工作。错误是,
没有为主机“localhost”上的用户“usernamexxx”定义此类授权。
。Idk出了什么问题。它可能是作为主机名的通配符出现的
username@%
。使用
select*from mysql.user查看用户表看看它是否有意义。请记住在授予后刷新特权。另外,当您运行mysql命令行客户机时,它位于远程主机上,对吗?哦,还有一件事:也许可以试试
user=username@192.168.0.xx“
在Python中。我不知道这是否有道理。还有一件事。我忘了指出,您似乎在远程主机而不是本地主机上运行mysql客户端。这并不能告诉你这条隧道能不能正常运行。您可能希望尝试在本地运行mysql客户端以连接到隧道,这样您就可以验证它正在执行您希望它执行的操作。
select*from mysql.user此命令是否仅在以root用户身份输入时有效?因为我没有作为root用户访问数据库的权限,因此无法运行此命令当您运行mysql命令行客户端时,它是在远程主机上运行的,对吗?`我相信是这样。我做了
user=username@192.168.0.xx“
但仍然出现访问被拒绝错误。
您可能希望尝试在本地运行mysql客户端以连接到隧道
。你是说使用一些桌面SQL客户端?我在windows(不是我的笔记本电脑)上试过,它使用SQL Heidi工作。