我想通过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)问题是用户' user '@'remote-host‘(或'user'@'%')不存在,只有'user'@'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/host中的远程服务器上,值如下所示:
127.0.0.1 localhost
remote-ip remote-host发布于 2015-12-30 07:00:22
请注意,在unix上的mysql中,localhost和127.0.0.1受到不同的对待。引用:
在Unix上,MySQL程序特别对待主机名localhost,这种方式可能与其他基于网络的程序不同。对于到本地主机的连接,MySQL程序试图使用Unix文件http://dev.mysql.com/doc/refman/5.7/en/connecting.html连接到本地服务器:
此外,即使您在命令行上显式指定了-P,mysql客户端也会默默地尝试使用套接字文件:
即使给出一个-端口或-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量身定做,它可以按照以下方式工作:
socatsocat "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发布于 2018-03-02 11:42:30
创建远程主机的MySQL隧道的简单方法是:
$ ssh -fNL TEMP_PORT:localhost:MYSQL_SERVER_PORT USER@SERVER_NAME测试:
$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORThttps://stackoverflow.com/questions/14606660
复制相似问题