我有一个 mysql 服务器运行在我们网络中的某个服务器上。现在,服务器只接受来自 localhost 的连接,我无法远程连接到它。现在,我想设置端口转发,使用 ssh 来在该服务器上使用一些 GUI 工具。但是,当我通过隧道连接时,不知何故我无法获得身份验证!它如下所示:
在远程计算机上:
mysql -u exporter --password=test -h localhost -P 3306 mydatabase
一切都运行正常并且我得到了一个连接的 mysql shell。
现在,在我的本地机器上设置端口转发:
ssh remotemachine -L127.0.0.1:33066:127.0.0.1:3306
要使用此隧道在本地机器上连接到远程 mysql 服务器,我执行以下操作:
mysql -u exporter --password=test -h localhost -P 33066 mydatabase
这是我收到的错误:
ERROR 1045 (28000): Access denied for user 'exporter'@'localhost' (using password: YES)
这怎么可能呢?我该怎么办?注意:这个问题在另一台远程机器上的另一个 mysql 服务器上完全可以重现。
答案1
你尝试过使用吗
ssh -L 33066:localhost:3306 remotemachine
?
请确保在 mysql 权限系统内部,127.0.0.1 和 localhost 都是数据库用户的允许源。
答案2
今天我自己也尝试做同样的事情,发现当你连接到 localhost/127.0.0.1 时,客户端会自动尝试通过本地套接字而不是普通的 tcp/ip 连接来连接到该进程,从而避免了 ssh 隧道。
您必须使用本地网络地址(例如:192.168.0.35)而不是环回设备地址(127.0.0.1)。
您还需要在 ssh 命令行中添加 -g 参数,以使该端口转发可通过非环回设备地址 192.168.0.35:3306 访问,否则只能通过 127.0.0.1:3306 访问
答案3
转载此文回答
我遇到了类似的问题,并且根据这个StackOverflow 答案,解决方案是删除“任何”用户。
看来 MySQL 看到了通过 localhost 和 127.0.0.1 连接的用户之间的差异,如果我理解正确的话,这是问题的一部分。