MySQL未知服务器主机(通过ssh隧道和CLI,但不是工作台)

时间:2012-02-15 00:08:39

标签: mysql ssh ssh-tunnel

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

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

当我通过My​​SQL 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]

1 个答案:

答案 0 :(得分:1)

您现有的plink命令是错误的,因为它指定localhost作为目标地址(这是SSH会话另一端的本地主机,所以[remote-ip],通过您的计算,这就是为什么你得到一个错误) - 它应该是[serverhost]。

然后,您错误尝试将mysql直接连接到[serverhost],但隧道不会影响路由,因此不正确,您应该连接到localhost。

当您连接到[remote-ip]上的ssh shell会话时,您现有的example命令有效,因为您正在连接来自 [remote-ip],它可能会访问[serverhost]。< / p>

假设[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 [?]&lt; --------&gt;远程IP [22]

隧道

  

localhost [local-port]&lt; ---- SSH ---&gt; remote-ip [22]&lt; --- TCP ---&gt;   SERVERHOST [远程端口]

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

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