ale*_*esf 9 mysql ssh localhost tunnel
我想通过ssh隧道与具有"localhost"访问权限的用户连接到远程MySQL.
我用这个做隧道:
ssh -f -N -L 33306:localhost:3306 user@remote-host
Run Code Online (Sandbox Code Playgroud)
这个连接到主机:
mysql -h 127.0.0.1 -P 33306 -uuser -ppassword
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ERROR 1045 (28000): Access denied for user 'user'@'remote-host' (using password: YES)
Run Code Online (Sandbox Code Playgroud)
问题是用户"用户"@"远程主机"(或"用户"@"%")不存在,只有"用户"@"localhost"才有.
有没有办法强制远程主机,没有服务器端修改认为我来自localhost?这是我通过ssh隧道进行连接的唯一原因.
注意:
如果我想连接此命令:
mysql -h localhost -P 33306 -uuser -ppassword
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)
其他数据:
在/ etc/hosts中的远程服务器上,值如下所示:
127.0.0.1 localhost
remote-ip remote-host
Run Code Online (Sandbox Code Playgroud)
请注意localhost和127.0.0.1在 unix 上的 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 量身定制,它可以如下工作:
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 Tunnel to REMOTE HOST 的简单方法:
$ ssh -fNL TEMP_PORT:localhost:MYSQL_SERVER_PORT USER@SERVER_NAME
Run Code Online (Sandbox Code Playgroud)
测试:
$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORT
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5287 次 |
| 最近记录: |