============================================================
        SSH隧道代理 (ssh_tunnels) 使用说明
============================================================

一、程序简介
------------------------------------------------------------
SSH隧道代理是一个基于 Go 开发的 SSH 隧道转发管理系统,
提供 Web 管理界面,主要功能:
  - 通过浏览器添加、管理 SSH 连接(密码认证)
  - 创建本地端口转发隧道(Local Forwarding)
  - 创建 SOCKS5 动态代理隧道
  - 在线查看连接与隧道运行状态,随时停止/重启/删除隧道
  - 支持远程文件管理(上传/下载/删除/新建目录)和 Web 终端

程序为单一可执行文件,静态页面已内嵌其中,无需安装任何
依赖(不需要 Go 环境、不需要额外配置文件),拷贝到任意
目录即可运行。

相关下载:
docker版本:
docker run -d --name ssh_tunnels -p 9527:9527 -v /etc/ssh_tunnels/data:/data moodincode/ssh_tunnels:latest
window/linxu版本:
https://download.csdn.net/download/qq_24577585/93345902


二、文件清单
------------------------------------------------------------
  ssh_tunnels_linux_amd64     Linux 64位 (x86_64) 可执行文件
  ssh_tunnels_linux_arm64     Linux 64位 (ARM64) 可执行文件
  ssh_tunnels_windows_amd64.exe  Windows 64位 可执行文件
  start.sh                    Linux 服务管理脚本(推荐使用)
  ssh隧道代理使用说明.txt     本说明文件
  docker容器版本,请访问https://hub.docker.com/r/moodincode/ssh_tunnels

按服务器 CPU 架构选择对应 Linux 文件即可,ARM 架构的
服务器(树莓派、飞腾、鲲鹏等)使用 ssh_tunnels_linux_arm64。


三、Windows 启动方法
------------------------------------------------------------
方式一(最简单):
  双击 ssh_tunnels_windows_amd64.exe 即可启动。

方式二(命令行,可指定端口):
  打开 cmd,进入程序所在目录,执行:
    ssh_tunnels_windows_amd64.exe
  指定端口启动:
    ssh_tunnels_windows_amd64.exe -port 8080

启动后浏览器访问: http://localhost:9527 (或指定的端口)

注意事项:
  - 首次运行若弹出 Windows 防火墙提示,请选择"允许访问"。
  - 关闭命令行窗口会停止服务;如需长期运行请保持窗口开启,
    或使用 Linux 服务器部署。
  - 数据保存在程序目录下的 data\ssh_manager.db。


四、Linux 启动方法(推荐用 start.sh)
------------------------------------------------------------
1. 上传文件到服务器(例如 /home/app 目录):
     mkdir -p /home/app && cd /home/app
   将 ssh_tunnels_linux_amd64(或 arm64 版本)与 start.sh
   上传到该目录。

2. 赋予执行权限:
     chmod +x start.sh ssh_tunnels_linux_amd64

3. 启动服务(默认端口 9527):
     ./start.sh start
   指定端口启动:
     PORT=8080 ./start.sh start

4. 查看运行状态:
     ./start.sh status

5. 实时查看日志(按 Ctrl+C 退出):
     ./start.sh logs

6. 停止 / 重启服务:
     ./start.sh stop
     ./start.sh restart

常用命令汇总:
     ./start.sh start      启动服务
     ./start.sh stop       停止服务
     ./start.sh restart    重启服务
     ./start.sh status     查看状态
     ./start.sh logs       查看日志

start.sh 说明:
  - 会根据 CPU 架构自动选择对应的可执行文件,无需手动指定。
  - 启动后自动生成 ssh_tunnels.pid(进程号)和 ssh_tunnels.log(日志)。
  - 数据库默认保存在脚本同目录下的 data/ssh_manager.db。


五、防火墙与安全组(重要)
------------------------------------------------------------
服务器上若开启防火墙,需放行 9527 端口:
  - CentOS / RHEL / 麒麟:
      firewall-cmd --permanent --add-port=9527/tcp
      firewall-cmd --reload
  - Ubuntu / Debian(ufw):
      ufw allow 9527/tcp

云服务器(阿里云、腾讯云、华为云等)还需在控制台的
"安全组"中添加入方向规则,放行 TCP 9527 端口。
(若修改了端口,请放行对应的端口)


六、使用 Web 界面
------------------------------------------------------------
1) 首次访问
   浏览器打开: http://服务器IP:9527
   首次使用需设置"访问密码"(至少 4 位),设置完成后
   每次访问都需要登录,请牢记该密码。

2) 添加 SSH 连接
   在"SSH连接"区域填写:
     - 连接名称:随意填写,方便识别
     - 服务器地址:IP 或 域名
     - 端口:默认 22
     - 用户名:SSH 登录用户名
     - 密码:SSH 登录密码
   点击"连接SSH服务器",连接成功后状态显示"已连接"。
   已保存的连接会持久化,重启程序后仍保留。

3) 创建隧道(本地端口转发)
   - 选择已连接的 SSH 连接
   - 填写隧道名称
   - 类型选择"本地转发"
   - 本地监听地址:一般填 0.0.0.0 或 127.0.0.1
   - 本地监听端口:例如 3306
   - 远程主机:例如 127.0.0.1
   - 远程端口:例如 3306
   点击"创建隧道"。
   效果:访问本机(服务器) 3306 端口,等于访问 SSH 服务器
   侧能访问到的 3306 端口,常用于远程连接内网数据库等场景。

4) 创建 SOCKS5 代理(动态转发)
   类型选择"SOCKS5",只需填写本地监听端口,
   创建后把浏览器或程序的代理设置为 服务器IP:端口,
   即可通过该 SSH 服务器转发上网。

5) 管理连接与隧道
   - 隧道可随时停止、重启、删除
   - 删除 SSH 连接会自动关闭该连接下的所有隧道
   - 隧道配置保存在数据库中,重启程序后自动恢复

6) 其他功能
   - 支持在 Web 页面打开远程终端(SSH 命令行)
   - 支持远程文件管理:上传、下载、删除文件,新建目录
   - 支持连接配置的批量导出 / 导入(便于迁移服务器)


七、数据存储与备份
------------------------------------------------------------
所有配置(SSH连接、隧道、访问密码)保存在 SQLite 数据库中:
  Linux:   <程序目录>/data/ssh_manager.db
  Windows: <程序目录>\data\ssh_manager.db

备份时直接拷贝 data 目录(或整个程序目录)即可。
删除该文件后,程序会重新生成一个空的数据库。


八、修改监听端口
------------------------------------------------------------
方式一(命令行参数):
  Linux:   PORT=8080 ./start.sh restart
  Windows: ssh_tunnels_windows_amd64.exe -port 8080
方式二(环境变量):
  Linux:   export PORT=8080
注意:修改端口后,需同步放行防火墙/安全组中对应的端口。


九、常见问题
------------------------------------------------------------
Q1: 网页打不开?
    检查服务是否已启动(./start.sh status);
    检查防火墙/安全组是否放行端口;
    本机验证:curl http://127.0.0.1:9527

Q2: 添加 SSH 连接失败?
    确认服务器地址/端口/用户名/密码是否正确;
    确认服务器允许密码登录;
    确认服务器 22 端口可访问(telnet 服务器IP 22 测试)。

Q3: 隧道创建后连不上?
    确认对应 SSH 连接处于"已连接"状态;
    确认本地监听端口未被其他程序占用;
    确认远程目标服务正常运行。

Q4: 忘记访问密码怎么办?
    程序提供了"修改密码"功能(登录后可在页面修改);
    若彻底忘记且无法登录,只能删除数据库文件
    data/ssh_manager.db 后重启程序重新设置
    (注意:连接和隧道配置会一并清除,建议平时先导出配置备份)。

Q5: 如何设置开机自启?
    Linux 可将启动命令加入 crontab(@reboot):
      crontab -e
      添加一行:  @reboot /home/app/start.sh start
    (也可使用 systemd 服务,请按需配置)

Q6: 程序会占用哪些资源?
    默认监听 9527 端口(Web 管理界面);
    每个 SSH 连接一个 SSH 会话,每个隧道一个本地端口;
    隧道本地端口不与 Web 端口冲突即可。


十、完整操作流程(从访问页面到创建隧道)
------------------------------------------------------------
第 1 步:访问页面
  启动程序后,在浏览器地址栏输入:
    http://服务器IP:9527
  (本机测试可用 http://127.0.0.1:9527)
  能看到页面即表示程序启动成功。

第 2 步:首次设置访问密码
  第一次访问页面时,会提示设置"访问密码":
    - 输入密码(至少 4 位,最多 64 位)
    - 再次确认密码
    - 点击"设置密码"
  设置成功后自动进入管理主页面。
  注意:
    - 之后每次访问都需要输入该密码登录,请牢记;
    - 登录后可在页面中"修改密码"。

第 3 步:添加 SSH 远程机器
  在主页面"SSH连接"区域,点击添加连接,填写:
    - 连接名称:随意填写,方便识别(如"内网数据库服务器")
    - 服务器地址:目标机器的 IP 或 域名
    - 端口:SSH 端口,默认 22
    - 用户名:SSH 登录用户名(如 root)
    - 密码:SSH 登录密码
  点击"连接SSH服务器":
    - 连接成功后,该连接状态显示为"已连接"(绿色)
    - 连接失败会提示原因(地址错误 / 密码错误 / 端口不通等)
  可添加多台机器,每台机器对应一个 SSH 连接。

第 4 步:添加隧道
  在"隧道"区域点击"创建隧道",填写:
    - 选择 SSH 连接:选择刚添加并已连接的机器
    - 隧道名称:随意填写,方便识别
    - 隧道类型:见下方"隧道类型说明"
    - 本地监听地址 / 本地监听端口
    - 远程主机 / 远程端口(SOCKS5 类型无需填写)
  点击"创建隧道",隧道状态变为"运行中"即创建成功。

第 5 步:验证隧道
  按隧道类型验证转发是否生效(验证方法见下方各类型说明)。


十一、隧道类型说明
------------------------------------------------------------
程序支持三种隧道类型:
  本地转发(local)、远程转发(remote)、SOCKS5动态代理(dynamic)

【1. 本地转发 - local】(最常用)
  作用:把"运行程序的机器上某个端口"的访问请求,通过 SSH
        服务器转发到"SSH服务器所在网络中的某个服务"。
  场景举例:
    - 通过公网跳板机访问内网的 MySQL(3306 端口)
    - 访问外网无法直连的内网 Web 服务
  填写示例:
    本地监听地址: 0.0.0.0(或 127.0.0.1)
    本地监听端口: 3306
    远程主机:     127.0.0.1
    远程端口:     3306
  效果:访问 本机:3306  = 访问 SSH服务器所在内网的 3306
  验证:mysql -h 本机IP -P 3306 -u root -p

【2. 远程转发 - remote】
  作用:与本地转发相反,让"SSH 远程服务器上的某个端口",
        转发到"运行程序的机器上的某个服务"。
  场景举例:
    - 本机跑了一个服务(如 8080),想让其他机器通过
      SSH 服务器访问到它(类似内网穿透)
  填写示例:
    本地监听地址: 127.0.0.1
    本地端口:     8080          (本机上的服务端口)
    远程主机:     127.0.0.1
    远程端口:     18080         (SSH 服务器上对外开放的端口)
  效果:访问 SSH服务器:18080 = 访问 本机:8080
  注意:远程端口需在 SSH 服务器防火墙中放行。

【3. SOCKS5 动态代理 - dynamic】
  作用:通过 SSH 服务器建立一个 SOCKS5 代理,所有流量都从
        SSH 服务器出口转发,相当于借用服务器网络访问资源。
  场景举例:
    - 服务器网络可以访问的资源,本机直接访问不了
    - 需要一个固定出口 IP 上网
  填写示例:
    本地监听地址: 0.0.0.0(或 127.0.0.1)
    本地监听端口: 1080
  效果:把浏览器/程序的 SOCKS5 代理设置为 本机IP:1080,
        即可通过 SSH 服务器转发流量。
  验证:浏览器设置代理后访问查询 IP 的网站,出口 IP
        应为 SSH 服务器的 IP。

三种类型对比:
  类型      | 数据方向                    | 关键填写项
  ----------+-----------------------------+------------------------------
  本地转发  | 本机端口 -> 远程服务        | 本地端口 + 远程主机/端口
  远程转发  | 远程端口 -> 本机服务        | 远程端口 + 本地主机/端口
  SOCKS5   | 本机代理端口 -> 全网        | 仅本地监听端口即可
  ----------+-----------------------------+------------------------------
  创建隧道时若"运行中",说明隧道已生效;若提示失败,
  请检查对应 SSH 连接是否"已连接"以及端口是否被占用。

============================================================
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐