我想从我的主机连接到远程 MySQL,但是主机位于 ssh 代理后面,就像这样。
我有 3 个主机遇到这个问题
- A:我的本地机器(可以 ssh 到 B)
- B:可以通过 SSH 连接到 C 的中间机器
- C:运行 MySQL 的远程服务器,仅允许来自本地主机的连接(授予)
我使用 ~/.ssh/config 允许我从 A 直接 ssh 到 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
然后我尝试从 A 登录 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,它将尝试登录到我的本地 MySQL 服务器,即使我使用不同的端口)
在我的 SSH -vvv 窗口中我还看到以下内容:
client-session (t4 r0 i0/0 o0/0 fd 7/8 cc -1)
C MySQL 服务器上没有日志。
有什么好的建议吗?
答案1
在我看来,您在主机 A 上运行的 mysql 命令试图连接到 A 上的端口 3366;我没有看到任何地方转发 A:3366。尝试添加从 A 到 B 的转发规则,或者如果没有进行过滤,您可以简单地将 mysql 命令更改为命中主机 B,而不是引用 A 的“-h127.0.0.1”。