通过ssh隧道连接到MySQL到localhost
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过ssh隧道连接到MySQL到localhost相关的知识,希望对你有一定的参考价值。
我想通过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
请注意,在unix上的mysql中,localhost
和127.0.0.1
的处理方式不同。引用:
在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量身定做,它可以如下工作:
- 在两端安装
socat
socat "UNIX-LISTEN:your_local_path/mysql.sock,reuseaddr,fork" EXEC:'ssh user@remote-host socat STDIO UNIX-CONNECT\:/your_server_path/mysql.sock"
mysql -S your_local_path/mysql.sock -u user
创建MySQL隧道到REMOTE主机的简单方法:
$ ssh -fNL TEMP_PORT:localhost:MYSQL_SERVER_PORT USER@SERVER_NAME
测试:
$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORT
以上是关于通过ssh隧道连接到MySQL到localhost的主要内容,如果未能解决你的问题,请参考以下文章
使用 SSH 隧道时无法通过套接字错误连接到本地 MySQL 服务器
如何使用 Fabric 通过 2 个网关将 SSH 隧道连接到远程主机?
Workbench 说:使用 root 用户通过 34.xxx.xxx.xxx:22 处的 SSH 隧道连接到 127.0.0.1:3306 处的 MySQL 失败