You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:通过第三方服务器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网络可达),可以按以下步骤操作:

  1. 从本地主机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。
  2. 修改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的开放端口,可以通过双重转发实现:

  1. 在本地主机上建立到A的端口转发,并允许外部访问:

    ssh -L 0.0.0.0:3306:A的IP地址:3306 user_a@A的IP地址 -N
    
    • 若本地3306端口被占用,可替换为3308等其他端口。
  2. 在本地主机上建立到B的反向端口转发,把本地的转发端口映射到B的某个端口:

    ssh -R B的IP地址:3309:localhost:3306 user_b@B的IP地址 -N
    
    • 说明:-R是反向转发,将B的3309端口映射到本地的3306端口。
  3. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:44:00