求助:通过第三方服务器B实现C连接A的MySQL的SSH隧道配置
解决方案:通过SSH端口转发实现C访问A的MySQL 3306端口
结合你的网络环境,我们可以利用SSH端口转发特性,借助你能直接SSH访问的节点(localhost或B)搭建数据通道,让C最终能连接到A的MySQL服务。下面提供两种可行方案,你可以根据实际网络连通情况选择:
方案一:以B为中转节点,搭建B到A的端口转发
如果C能直接访问B的端口(比如你之前尝试连接B的3306,说明C和B网络可达),可以按以下步骤操作:
从本地主机SSH登录到B,在B上建立到A的端口转发:
# 先通过本地连接B ssh user_b@B的IP地址 # 在B上执行转发命令,将B的3306端口映射到A的3306端口 ssh -L 0.0.0.0:3306:A的IP地址:3306 user_a@A的IP地址 -N- 说明:
-L表示本地端口转发,0.0.0.0:3306让B的所有网卡监听3306端口,转发到A的3306;-N表示仅做转发不执行远程命令。如果B的3306端口已被占用,可替换为其他端口(比如3307),命令改为-L 0.0.0.0:3307:A的IP地址:3306。
- 说明:
修改C上的PHP脚本,将MySQL连接地址改为B的IP(如果换了端口就加上端口号):
# 用默认3306端口的情况 $conn = mysqli_connect("B的IP地址", "MySQL用户名", "MySQL密码", "数据库名"); # 用3307端口的情况 # $conn = mysqli_connect("B的IP地址:3307", "MySQL用户名", "MySQL密码", "数据库名");
方案二:以localhost为双重跳板,搭建C到A的隧道
如果C无法直接访问B的SSH端口,但能访问localhost的开放端口,可以通过双重转发实现:
在本地主机上建立到A的端口转发,并允许外部访问:
ssh -L 0.0.0.0:3306:A的IP地址:3306 user_a@A的IP地址 -N- 若本地3306端口被占用,可替换为3308等其他端口。
在本地主机上建立到B的反向端口转发,把本地的转发端口映射到B的某个端口:
ssh -R B的IP地址:3309:localhost:3306 user_b@B的IP地址 -N- 说明:
-R是反向转发,将B的3309端口映射到本地的3306端口。
- 说明:
修改C上的PHP脚本,连接B的3309端口:
$conn = mysqli_connect("B的IP地址:3309", "MySQL用户名", "MySQL密码", "数据库名");
关键注意事项
- 确保SSH登录的用户(user_a、user_b)拥有对应服务器的登录权限;
- 检查防火墙规则:A需允许B的SSH连接(22端口),B需允许C访问转发的端口(3306/3307/3309),本地主机需允许对应端口的外部访问(方案二场景);
- MySQL配置调整:A上的MySQL需允许转发节点(B或localhost)的连接,可在
my.cnf中将bind-address改为0.0.0.0,并给MySQL用户授权用户名@'%'或用户名@'节点IP'的访问权限。
内容的提问来源于stack exchange,提问作者Sim Sca
相关产品推荐
相关产品推荐

