SSH 隧道和端口转发,用于通过 SSH 代理连接 MySQL

SSH 隧道和端口转发,用于通过 SSH 代理连接 MySQL

我在一台机器(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

虽然不完全匹配,但这里还有一些其他密切相关的问题:

  1. 如何访问无法接受传入连接的 ssh 服务器
  2. 在防火墙后面的机器之间建立 ssh 连接

为了解决您的具体问题,我会将以下内容添加到.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而不是选项-Wssh因为-W直到 ssh 版本 5.3(IIRC)才添加该选项。

您不需要使用 SOCKS 代理。

相关内容