第三台机器上的SSH代理和MySQL

我想从我的主机连接到远程MySQL,但主机是在一个SSH代理,像这样。

我有3个主机在这个问题

  • 答:我的本地机器(可以ssh到B)
  • B:可以通过SSH连接到C的中级机器
  • C:一个运行MySQL的远程服务器,只允许来自localhost的连接(grant)

我使用〜/ .ssh / config来允许我直接从A到C(使用B作为代理)。

Host B ProtocolKeepAlives 30 HostName hostnameofB Host C ProtocolKeepAlives 30 ProxyCommand ssh -q B nc -q0 hostnameofC 22 LocalForward 3336 localhost:3306 Port 21343 

我用-vvv打开一个从A到C的ssh,看到这个:

 debug1: Local connections to LOCALHOST:3336 forwarded to remote address localhost:3306 

然后我尝试从Alogin到MySQL:

 mysql -uMyUsername -pMyPassword DatabaseName -P3336 -h127.0.0.1 ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0 

(如果我尝试使用-hlocalhost,它将尝试login到我的本地MySQL服务器,即使我使用不同的端口)

在我的SSH -vvv窗口中,我也看到这个:

 client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1) 

C MySQL服务器上没有日志。

有什么好的build议?

看起来像你在主机A上运行的mysql命令,试图连接到A上的端口3366; 我没有看到任何地方转发A:3366。 尝试添加从A到B的转发规则,或者如果没有过滤完成,您可以简单地将您的mysql命令更改为命中主机B,而不是“-h127.0.0.1”,这是指A.