我已经在两个服务器 A 和 B 之间建立了SSH隧道。 B 有MySQL服务器,这可行:
mysql -h localhost -P 3306 -u user -p
虽然这不是:
mysql -h 127.0.0.1 -P 3306 -u user -p
尽管my.cnf具有以下几行:
bind-address = 127.0.0.1
# Next addr differs slightly, but anyway
bind-address = 99.99.99.99
现在关于隧道。它连接以下内容:(A) localhost(9989) -> (B) localhost(3306)
但是当(在 A上
,端口转发)时,我会
mysql -v -h 127.0.0.1 -P 9989 -u user userdb -p
我懂了 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
当我这样做
mysql -v -h localhost -P 9989 -u user userdb -p
我懂了 ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES)
可能是什么原因?我究竟做错了什么?
这里有三个问题。
1-暂时忘记SSH隧道
您不能将MySQL绑定到多个特定IP。第一个bind-address
子句被第二个子句覆盖(因此被忽略)。您的服务器仅侦听99.99.99.99
。
可以连接-h localhost
但不能连接的原因-h 127.0.0.1
是,在第一种形式中,您实际上不是通过TCP /
IP连接,而是通过本地套接字连接。
在您my.cnf
的socket
条款中查找。
删除一个冗余bind-address
子句。您可能需要使用bind-address=0.0.0.0
,它指示MySQL守护程序监听 所有 网络接口。
2-让我们设置您的SSH隧道
错误的原因对我ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
来说并不明显。我 怀疑
SSH隧道仅在收到连接请求时才建立(在您的情况下,当您运行mysql
客户端时)。由于您的服务器不侦听127.0.0.1(请参阅上一段落),因此无法建立SSH隧道,连接失败,并且客户端将其解释为网络故障。
3-为什么mysql -v -h localhost -P 9989 -u user userdb -p
失败
请发布的输出
[编辑:仅在...OR host LIKE 'localhost'
下面添加,因为这可能与故障排除有关]
mysql > SELECT user, host FROM mysql.user WHERE user LIKE 'user' OR host LIKE 'localhost';
('user'
在LIKE
子句后,如有必要,请用实际用户名替换)
MySQL访问控制同时检查用户名/密码(user
)和连接源(host
),以识别用户。您可能没有创建用户'user'@'localhost'
。
注意:目前无法从我的位置访问mysql.com,我无法链接到相关的手册页。
问题内容: 我的目的是连接到位于防火墙后面的服务器(主机)。我可以通过连接到网络中的另一台服务器(隧道)然后通过SSH到该服务器来访问此服务器。但是,我无法通过JSch实现相同的方案。 我无法为此编写以下代码。如果我在这里做任何愚蠢的事情,请告诉我。 上面的代码在行中给出了以下异常。 问题答案: jsch上的代理设置允许您连接到远程端上 正在运行的 代理服务器。一个在远程端将 不 被视为一个代理。
我想使用RazorSQL连接到我的数据库,该数据库正在远程服务器上运行。我使用以下命令在本地主机上创建SSH隧道: 我通过RazorSQL的GUI配置连接,将本地主机指定为主机,将1111指定为端口。当我单击“Connect”(连接)时,出现以下错误消息: 其中是远程服务器的IP地址。 此外,我不允许更改我的pg_hba的内容。conf文件。这就是目前的情况: 是否可以使用我当前的设置,在不修改服
我想通过ssh隧道与具有localhost访问权限的用户连接到远程MySQL。 我用这个做隧道: 和这个连接到主机: 我得到的错误是: 问题是用户“user”@“remote-host”(或“user”@“%”)不存在,只有“user”@“localhost”存在。 有没有办法强迫远程主机在不进行服务器端修改的情况下认为我来自本地主机?这是我通过ssh隧道进行连接的唯一原因。 注: 如果要连接此命
我有两台机器: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的机会都没有,在本地被拒绝了。
问题内容: 我已经在不同的主机名上设置了约50个数据库,并要求我通过SSH隧道连接到它们。 例如: SSH主机位于 MySQL主机位于 我已经设法使用autossh(运行Debian的Web服务器)创建隧道,但是我似乎无法弄清楚如何连接到SSH隧道之外的特定MySQL主机名。 键入确认隧道正在运行(将端口3307发送到ssh.example.com端口3306) 所以当我尝试时,我会拒绝连接。不太