如何使用 ssh ProxyCommand 连接到堡垒主机后面的远程 MySQL 服务器?

如何使用 ssh ProxyCommand 连接到堡垒主机后面的远程 MySQL 服务器?

这里涉及三台机器。

  1. 我进行开发所在的本地主机。又称笔记本电脑。
  2. 您必须首先连接的堡垒主机。又称为跳跃。
  3. 我想要连接的 MySQL 服务器。又称为 DB。

跳转时,我的 ssh 公钥位于 /home/myusername/.ssh/authorized_keys 中。

我的 ~/.ssh/config 有这个:

Host jump
    HostName jump.domain.com
    User myusername
    IdentityFile ~/.ssh/myprivatekey

我可以ssh jump,而且跳得很好。

我需要在笔记本电脑的终端上运行什么 ssh 命令才能通过

mysql -h 127.0.0.1 -P 3308

我需要一个 SSH 隧道和一个端口转发,但我还没有弄对语法。我想使用 3308 作为生产数据库,使用 3307 作为暂存数据库,并在 3306 上运行本地 MySQL 数据库,这就是将端口转发到非标准 mysql 端口的原因。

答案1

这就是我最终使用的方法:

ssh -f -L3307:staging.mysql-server.com:3306 jump sleep 10000000
ssh -f -L3308:production.mysql-server.com:3306 jump sleep 10000000

来自http://csce.uark.edu/~kal/info/private/ssh/ch09_02.htm9.2.6 节

注意:与我问的问题相反,不需要 proxyCommand,只需要正确的 ssh 命令行选项组合。

答案2

命令是ssh -fL <mysql db port>:<mysql server url>:<mysql db port> <username>@<bastian url> '<remote command>'

来源

答案3

假设你通过机器 B 从机器 A 连接到机器 C,则可以使用以下 .ssh/config

Host B
  User username_on_b
  Hostname ip_of_b
  IdentityFile ~/.ssh/key_for_b

Host C
  User username_on_c
  Hostname ip_of_c
  IdentityFile ~/.ssh/key_for_c
  Localforward 3308 ip_of_your_sql_server:3306
  Proxyjump B
  # or old-fashion
  # Proxycommand ssh B nc %h %p

然后你只需从 A 输入:

ssh C

然后从 A 开始,你可以

mysql -P 3308 -H localhost

相关内容