让 MySQL 使用转发的 TCP 端口
当 MySQL 客户端应当通过 SSH TCP 转发连接时,避免选择本地 Unix 套接字。
SSH 转发监听本地端口 13306,但 mysql 仍然连接到本地数据库——或者报告其本地套接字缺失。在 Unix 上,被指定 localhost 的 MySQL 客户端可能选择 Unix 套接字而不是 TCP。指定端口并不一定会改变这一选择。
对于已有的获准 TCP 转发,请显式指定协议:
mysql --protocol=TCP --host=127.0.0.1 --port=13306 \
--user=dbuser --password
用户名仅为示例;密码选项会请求交互式输入。该命令连接的是本地 TCP 监听器,而不是 Unix 套接字。
保持两种登录相互独立
一条固定的 SSH 路由可以采用这种形式:
ssh -N -L 127.0.0.1:13306:db.internal:3306 [email protected]
网关的 SSH 服务器可达 db.internal:3306。随后 MySQL 通过该字节流对数据库账户进行身份验证。被接受的 SSH 密钥并不授予数据库登录权限,而数据库的源地址限制会看到连接来自该路由的那一侧。
这是固定的 TCP 适配器,而不是由 mysql 使用的 SOCKS 设置。应用程序不需要 SOCKS 协商,因为转发端点只有一个预先确定的目标。
在使用处保留预期的数据库 TLS 身份和证书策略。将套接字连接到环回地址并不会使数据库证书对另一个服务名称有效。成功的本地 TCP 连接只解决传输方式的选择,而不解决随后的数据库身份验证或 TLS 检查。