1. 核心概念

  • SSH 反向隧道 (-R):让服务端(公网)主动连接客户端(内网),将内网端口“推”到公网。
  • Autossh:SSH 的守护进程,负责监控连接健康状况(通过 -M 端口),断线自动重连,保证隧道持久化。

2. 前置配置 (服务端)

在公网服务器上,必须修改 SSH 配置以允许外部访问转发的端口。

  • 文件/etc/ssh/sshd_config
  • 修改项
    GatewayPorts yes
  • 操作:修改后需重启 sshd (systemctl restart sshd)。如果不开启,端口只能在服务器本地 (127.0.0.1) 访问。

3. 启动命令 (内网端)

autossh -M 20000 -fCNR 0.0.0.0:8000:localhost:5000 root@public_server_ip
参数含义
-M 20000监控端口。Autossh 用它来发送心跳包检测连接状态。
-f后台运行。
-C开启压缩,节省带宽。
-N不执行远程命令(仅转发)。
-R反向转发模式。格式:[Bind_IP]:[Public_Port]:[Local_Target]:[Local_Port]

关于 Bind IP 命令中的 0.0.0.0:8000 非常关键。如果省略 0.0.0.0,默认可能只绑定到 Loopback 接口,导致外网无法访问该端口。

4. 故障排查

  1. 服务器端netstat -tuln | grep 8000 查看端口是否监听。

  2. 内网端ps aux | grep autossh 查看进程是否存活。

  3. 云防火墙:检查云服务商的安全组是否放行了 8000 端口。

  4. 密钥认证:必须提前配置 ssh-copy-id 实现免密登录,否则 Autossh 无法自动重连。