我在一台机器(C)上运行着一个 mysql,该机器位于一台 SSH 代理机器(B)后面。我想使用本地计算机(A)上的 mysql workbench 连接到 C 上的 mysql 端口 3306。机器 A 可以通过 ssh 访问机器 B,用户 abc 可以使用私钥访问机器 B。机器 C 可以通过 ssh 访问机器 B,用户 root 可以使用相同的私钥访问机器 B(必须转发密钥,这通常发生在我执行 A-ssh -> B-ssh -> C 时)
我的隧道策略应该是什么?我需要使用 socks 代理吗?
谢谢
答案1
虽然不完全匹配,但这里还有一些其他密切相关的问题:
为了解决您的具体问题,我会将以下内容添加到.ssh/config
“A”上的文件中:
Host B
User abc
ForwardAgent yes
Host C
User root
LocalForward 3306:localhost:3306
ProxyCommand ssh -A B -p 22 -W %h:%p
#ProxyCommand ssh -A B -p 22 nc %h %p
有了它,您应该能够使用ssh C
:
- 获取 C 上的 shell,跳过 B,然后
- 为您的 mysql 工作台建立一个本地(到主机 A)端口转发。
一旦建立连接,您就可以将本地(在 A 上)mysql 工作台指向 localhost:3306。如果您在 A 上本地运行其他 mysql 实例,请在LocalForward
配置选项中选择其他端口并连接到该端口。
请注意,ProxyCommand 有两个选项可以通过 B 跳转到 C。另一种选择是使用nc
而不是选项-W
,ssh
因为-W
直到 ssh 版本 5.3(IIRC)才添加该选项。
您不需要使用 SOCKS 代理。