通过ssh隧道连接到MySQL到localhost

时间:2013-01-30 14:43:48

标签: mysql ssh localhost tunnel

我希望通过ssh隧道与具有“localhost”访问权限的用户连接到远程MySQL。

我用这个做隧道:

ssh -f -N -L 33306:localhost:3306 user@remote-host

这将连接到主持人:

mysql -h 127.0.0.1 -P 33306 -uuser -ppassword

我得到的错误是:

ERROR 1045 (28000): Access denied for user 'user'@'remote-host' (using password: YES)

问题是用户“用户”@“远程主机”(或“用户”@“%”)不存在,只有“用户”@“localhost”才会存在。

有没有办法强制远程主机,没有服务器端修改认为我来自localhost?这是我通过ssh隧道进行连接的唯一原因。


注意:

如果我想连接此命令:

mysql -h localhost -P 33306 -uuser -ppassword

我收到此错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

其他数据:

在/ etc / hosts中的远程服务器上,值如下所示:

127.0.0.1       localhost
remote-ip       remote-host

2 个答案:

答案 0 :(得分:1)

请注意,{i}上的localhost127.0.0.1在mysql中的处理方式不同。 引用:

  

在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器   http://dev.mysql.com/doc/refman/5.7/en/connecting.html

此外,即使您在命令行中明确指定-P,mysql客户端也会静默尝试使用套接字文件:

  

即使给出--port或-P选项来指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP / IP连接,请使用--host或-h指定主机名值127.0.0.1

有效地,使用此命令 mysql -h localhost -P 33306 -uuser -ppassword 您只是尝试连接到缺少的本地mysqld

考虑到这一点,您的问题归结为连接到域套接字上可用的远程服务器。

如果安装其他软件符合您的要求并且没有服务器端修改'你可以使用socat,如下所述: https://www.debian-administration.org/users/dkg/weblog/68

为mysql量身定做,它可以如下工作:

  1. 在两端安装socat
  2. socat "UNIX-LISTEN:your_local_path/mysql.sock,reuseaddr,fork" EXEC:'ssh user@remote-host socat STDIO UNIX-CONNECT\:/your_server_path/mysql.sock"
  3. mysql -S your_local_path/mysql.sock -u user

答案 1 :(得分:1)

创建MySQL隧道到REMOTE HOST的简单方法:

$ ssh -fNL TEMP_PORT:localhost:MYSQL_SERVER_PORT USER@SERVER_NAME

测试:

$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORT