0

当我尝试通过 SSH 隧道访问 mysql 时,出现错误:

ERROR 2005 (HY000): Unknown MySQL server host '[serverhost]' (0)

但是,当我通过 MySQL Workbench 或普通的 SSH CLI 进行尝试时,它工作正常。我究竟做错了什么?(我已经扫描了该站点上的多个相关线程,但没有一个可以向我解释这种行为。)

TMI:

我拥有的主机是一个名称,而不是一个 IP。

我这样打开隧道:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:localhost:[remote-mysql-port]

我在命令行(通过隧道)上调用mysql,因此:

mysql -h [serverhost] -u [user] -p[pw] --port [local-listen-port]

因此,我通过 SSH 命令行(无隧道)调用 mysql:

mysql -h [serverhost] -u [user] -p[pw] --port [remote-mysql-port]
4

1 回答 1

2

您现有的 plink 命令是错误的,因为它指定 localhost 作为目标地址(这是 SSH 会话另一端的 localhost,所以 [remote-ip],根据您的估计,这就是您收到错误的原因) -它应该是 [服务器主机]。

然后,您错误地尝试将 mysql 直接连接到 [serverhost],但隧道不影响路由,所以这是不正确的,您应该连接到 localhost。

您现有的示例命令在连接到 [remote-ip] 上的 ssh shell 会话时有效,因为您是[remote-ip] 连接的,它大概可以访问 [serverhost]。

假设 [serverhost] 是远程服务器,您的命令应该是:

plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:[serverhost]:[remote-mysql-port]

然后

mysql -h localhost -u [user] -p[pw] --port [local-listen-port]

编辑:让我尝试为您绘制图表,因为您显然误解了隧道的性质:

SSH 连接

localhost[?] <--------> 远程 IP[22]

隧道

本地主机 [本地端口] <---- SSH ---> 远程 IP [22] <--- TCP ---> 服务器主机 [远程端口]

因此,SSH/plink 在 localhost 上绑定了一个端口,使用你指定的 [local-port] 号,当接收到连接请求时,建立从 [remote-ip] 到 [serverhost:remote-port] 的连接,然后在它们之间来回打乱发送/接收,使用它自己的 SSH 连接从 [localhost] 到 [remote-ip] 的跃点。

所以——一旦建立了隧道,要访问[serverhost:remote-port],你实际上将你的工具指向[localhost:local-port],隧道将流量路由到适当的地方。

于 2012-02-15T00:18:20.153 回答