![如何使用 ssh ProxyCommand 连接到堡垒主机后面的远程 MySQL 服务器?](https://linux22.com/image/1438197/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20ssh%20ProxyCommand%20%E8%BF%9E%E6%8E%A5%E5%88%B0%E5%A0%A1%E5%9E%92%E4%B8%BB%E6%9C%BA%E5%90%8E%E9%9D%A2%E7%9A%84%E8%BF%9C%E7%A8%8B%20MySQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
这里涉及三台机器。
- 我进行开发所在的本地主机。又称笔记本电脑。
- 您必须首先连接的堡垒主机。又称为跳跃。
- 我想要连接的 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