当前位置: 首页 > 知识库问答 >
问题:

通过ssh隧道连接到MySQL到本地主机

祁飞飙
2023-03-14

我想通过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/hosts中的远程服务器上,值如下所示:

127.0.0.1       localhost
remote-ip       remote-host

共有2个答案

寿翰飞
2023-03-14

请注意,localhost127.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

实际上,使用这个命令,您只需尝试连接到缺少的本地mysqld

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

如果安装其他软件“无需服务器端修改”即可满足您的要求,您可以使用如下所述的socat:https://www.debian-administration.org/users/dkg/weblog/68.

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

  1. 在两端安装socat
  2. socat“UNIX-LISTEN:your\u local\u path/mysql.sock,reuseaddr,fork”EXEC:'sshuser@remote-hostsocat STDIO UNIX-CONNECT\:/your\u server\u path/mysql。袜子“
  3. mysql-S your\u local\u路径/mysql。sock-u用户
寇景明
2023-03-14

创建MySQL隧道到远程主机的简单方法:

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

测试:

$ mysql -u root -p -h 127.0.0.1 -P TEMP_PORT
 类似资料:
  • 问题内容: 我已经在两个服务器 A 和 B 之间建立了SSH隧道。 B 有MySQL服务器,这可行: 虽然这不是: 尽管my.cnf具有以下几行: 现在关于隧道。它连接以下内容: 但是当(在 A上 ,端口转发)时,我会 我懂了 当我这样做 我懂了 可能是什么原因?我究竟做错了什么? 问题答案: 这里有三个问题。 1-暂时忘记SSH隧道 您不能将MySQL绑定到多个特定IP。第一个子句被第二个子句覆

  • 我有两台机器:machine foo()运行redis服务器,而machine bar()运行通过Jedis连接到foo的java应用程序。当给jedis提供地址时,一切都很好。 但是我不信任foo和bar之间的路由器,redis也不支持SSL。因此,我设置了一个从bar到foo:的ssh隧道 现在,从bar中,我可以直接在或通过隧道在成功地telnet到foo上的redis。对于jedis,如果

  • 同时,我尝试使用mysql workbench进行连接,它会立即拒绝连接。让我想,它甚至连连接ssh tunel的机会都没有,在本地被拒绝了。

  • 我正试图通过SSH隧道从本地JAVA程序连接到RDS数据库,并连接到EC2实例以进行调试。我试图通过SSH隧道进入EC2实例,然后将端口转发到RDS数据库。这是我的密码。 请帮忙! 编辑:looply_dev10月2, 2012 4:17日下午

  • 我正在我的机器上运行Ansible。我的机器没有ssh访问远程机器的权限。来自本地计算机的端口22连接被学院防火墙阻止。但是我可以访问一台机器(ssh隧道),通过它我可以登录到远程机器。现在有一种方法可以在远程主机上从本地机器运行ansible playbook。 在某种程度上,可以通过ssh隧道将Ansible/ssh连接到远程机器。但并不完全登录到ssh隧道。连接将通过隧道。 另一种方法是我可

  • 我需要通过ssh连接连接到Mysql RDS DB,我尝试过的是打开一个ssh隧道,然后连接到那个DB,但是没有工作。 下面是我的代码: 上述代码崩溃,但有以下例外情况,并在“con=drivermanager.getconnection(dburl,dbuserName,dbpassword);”行中崩溃: 请注意,ssh主机ip与db主机ip不同 多谢了。