🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

阿里云中继穿透 MaybeMeibeMaybi/dsh-aliyun-relay-access

DeepSeek Harness
MaybeMeibeMaybi38 天前有提交已提供中文文档扫描:含敏感能力

让手机随时远程打开电脑上的 dsh 界面

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add MaybeMeibeMaybi/dsh-aliyun-relay-access
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 38 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-aliyun-relay-access(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/8 08:45:26

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 16 处,展示前 16 条)
  • 读取密钥环境变量
    src/gateway/dsh-auth-gateway.mjs:59
    const PASSWORD = arg("password", process.env.DSH_GW_PASSWORD ?? "");
  • 读取密钥环境变量
    src/gateway/dsh-auth-gateway.mjs:60
    const PASSWORD_HASH = arg("password-hash", process.env.DSH_GW_PASSWORD_HASH ?? "");
  • 读取密钥环境变量
    src/gateway/dsh-auth-gateway.mjs:61
    const REGISTER_KEY_FILE = arg("register-key-file", process.env.DSH_GW_REGISTER_KEY_FILE ?? "");
  • 读取密钥环境变量
    src/gateway/dsh-auth-gateway.mjs:62
    const REGISTER_KEY_INLINE = arg("register-key", process.env.DSH_GW_REGISTER_KEY ?? "");
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:72
    if (!existsSync(PFX)) throw new Error(`--pfx 不存在: ${PFX}`);
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:73
    return { pfx: readFileSync(PFX), passphrase: PFX_PASS || undefined };
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:75
    if (!CERT || !KEY || !existsSync(CERT) || !existsSync(KEY)) {
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:78
    return { cert: readFileSync(CERT), key: readFileSync(KEY) };
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:104
    if (REGISTER_KEY_FILE && existsSync(REGISTER_KEY_FILE)) {
  • 读取本地文件
    src/gateway/dsh-auth-gateway.mjs:106
    return readFileSync(REGISTER_KEY_FILE, "utf8").trim();
  • 发起网络请求
    src/gateway/dsh-auth-gateway.mjs:293
    const req = http.request(
  • 发起网络请求
    src/gateway/dsh-auth-gateway.mjs:319
    const req = http.request(
  • 发起网络请求
    src/gateway/dsh-auth-gateway.mjs:368
    const upstream = http.request(
  • 发起网络请求
    src/gateway/dsh-auth-gateway.mjs:617
    const upstream = http.request({ hostname: BACKEND_HOST, port: BACKEND_PORT, method: req.method, path: req.url, headers });
  • 发起网络请求
    src/tunnel/dsh-entry-proxy.mjs:240
    const proxyReq = http.request(
  • 发起网络请求
    src/tunnel/dsh-entry-proxy.mjs:289
    const upstreamReq = http.request({
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 远程访问电脑网页界面
  • frp反向隧道
  • 穿透CGNAT与防火墙

用便宜云中转从任何地方访问 DeepSeek Harness(dsh)网页 GUI。frp 反向隧道:PC 主动外拨,CGNAT 和入站防火墙都不影响。

README

由 DeepSeek 最新模型翻译生成
基于阿里云的公网远程访问与控制 DeepSeek Harness 通过廉价的云端中继,从任何地方访问 DeepSeek Harness(dsh)Web GUI License: MIT SSH tunnel HTTPS gateway Aliyun Platform 电脑在任何网络下(家庭宽带、5G 热点、外地 WiFi、校园网、运营商 CGNAT 大内网),手机都能通过一个固定的公网地址访问这台电脑上的 dsh GUI。 本项目提供三种由弱到强的接入方式,可以按需选择或叠加: | 方式 | 手机要求 | 加密 | 认证 | 公网端口 | | ① frp 反向隧道(起步方案) | 浏览器 | 隧道段加密 | dsh token | 7000 + 18080 | | ② SSH 反向隧道(推荐) | SSH 客户端 | SSH | 密钥 | 仅 22 | | ③ HTTPS 认证网关 | 仅浏览器 | TLS | 密码 | 22 + 18443 | ③ 是原生鸿蒙(无 SSH 客户端)唯一可行的方案;配合 dsh-token-broadcast 插件自动上报 token,用户只需输一次密码。 演进过程与实测结论见 docs/UPDATES-2026-09-23.md。
展开完整文档(README 剩余 1 节)
基于阿里云的公网远程访问与控制 DeepSeek Harness

通过廉价的云端中继,从任何地方访问 DeepSeek Harness(dsh)Web GUI

License: MIT
SSH tunnel
HTTPS gateway
Aliyun
Platform

电脑在任何网络下(家庭宽带、5G 热点、外地 WiFi、校园网、运营商 CGNAT 大内网),手机都能通过一个固定的公网地址访问这台电脑上的 dsh GUI。

本项目提供三种由弱到强的接入方式,可以按需选择或叠加:

| 方式 | 手机要求 | 加密 | 认证 | 公网端口 |
| ① frp 反向隧道(起步方案) | 浏览器 | 隧道段加密 | dsh token | 7000 + 18080 |
| ② SSH 反向隧道(推荐) | SSH 客户端 | SSH | 密钥 | 仅 22 |
| ③ HTTPS 认证网关 | 仅浏览器 | TLS | 密码 | 22 + 18443 |

③ 是原生鸿蒙(无 SSH 客户端)唯一可行的方案;配合 dsh-token-broadcast 插件自动上报 token,用户只需输一次密码。
演进过程与实测结论见 docs/UPDATES-2026-09-23.md。

零、三种方式怎么选

- 只想最快跑通 → 用 ①(docs/DEPLOY.md 的 frp 主线)
- 追求最小暴露面 + 最安全 → 用 ②(src/tunnel/,公网只剩 22 端口)
- 手机是原生鸿蒙 / 不想装任何客户端 → 用 ③(src/gateway/)

②③ 都已在真实环境验证通过:②的公网端口收敛到仅 SSH;③的浏览器流程(登录 → 直接进 GUI → WebSocket 101)见 tests/。

一、为什么是中继,而不是端口映射

| 方案 | 前提 | 适用性 |
| 端口映射 / DDNS | 电脑要有公网 IP,且能在路由器上开端口 | ❌ 电脑在随机网络间切换时经常不成立,甚至处在运营商 CGNAT 之后 |
| 反向隧道中继(本项目) | 只需服务器有公网 IP | ✅ 电脑主动连出到服务器,对 CGNAT 与入站封锁免疫 |

关键点:连接方向是「电脑 → 服务器」,所以电脑侧不需要任何入站端口。

方式①:frp(起步方案)

手机 ──► :18080 ──► [frps] ──► 反向隧道 ──► 电脑 frpc
(公网入口) (云服务器) (电脑主动连出) │
▼
127.0.0.1:18080 (dsh-entry-proxy)
│
▼
127.0.0.1:3080 (dsh web)

dsh web 本体始终只监听环回;公网只暴露 frps 的一个端口。

二、⚠️ 云服务器免费额度的真实机制(选型最易踩坑)

以阿里云个人试用为例,它不是"送一台机器 N 个月",而是:

| 机制 | 数值 |
| 总抵扣额度 | 300 元(个人实名认证) |
| 每小时抵扣上限 | 0.833 元/小时 |
| 权益有效期 | 最长 3 个月 |
| 理论最长运行 | 约 1181 小时 ≈ 49 天 |

核心结论:

1. 必须选单价 ≤ 0.833 元/小时的规格。若选了例如 1.2 元/小时的规格,超出的 0.367 元/小时要你自己付钱,还会更快烧完新用户权益。
2. 规格越小跑得越久;1核1G 不建议,推荐 经济型 e 实例 2核2G 或 2核4G。
3. 免费实例不支持 ICP 备案,所以用 7000 / 18080 非标端口——既避开备案,也不冲突。
4. 到期或额度耗尽会自动释放实例,数据只保留 72 小时:服务器上只放可重建的东西。
5. 同一实名主体只能领一次;买过/试用过 ECS 的账号可能已失去资格。

务必设置预算告警:控制台 → 费用与成本 → 预算管理 → 阈值 1 元。

三、目录结构

.
├── README.md
├── LICENSE
├── package.json
├── docs/
│ ├── DEPLOY.md 从零部署:8 步 + 排错表 │ ├── ARCHITECTURE.md 链路细节、七个设计决策、分层验证法 │ ├── SECURITY.md 三道防线、凭据清单、SSH 加固、自查清单 │ ├── MIGRATION.md 换服务器四步 / 换电脑三步 │ ├── INCIDENT-2026-09-27-gateway-token-not-registered.md ★ 网关漏注册 token 复盘 │ └── UPDATES-2026-09-23.md 本次演进汇总(SSH 隧道 + HTTPS 网关 + 实测结论) ├── tools/ │ └── verify-gateway.mjs ★ 一条命令查清"远程为什么进不去"(--register 可补注册) ├── src/ │ ├── server/ │ │ ├── relay-server-setup.sh 服务器端一键部署 frps(自包含) │ │ └── aliyun-paste-command.sh 适合直接粘贴进网页控制台的版本 │ ├── client/ │ │ ├── frpc.toml.template 电脑端配置模板(两处占位符) │ │ └── ssh-key-setup.ps1 SSH 密钥登录 + 加固(纯 ASCII) │ ├── tunnel/ ★ 方式②:SSH 反向隧道(取代 frp) │ │ ├── Start-SshTunnel.ps1 隧道客户端 + 掉线自愈(纯 ASCII) │ │ ├── Switch-ToSshTunnel.ps1 从 frp 一次性切换过来 │ │ ├── relay-ssh-hardening.sh 服务器加固 + 退役 frps │ │ └── dsh-entry-proxy.mjs ★ 隧道入口的本地代理(局域网与中继共用一份) │ └── gateway/ ★ 方式③:HTTPS 认证网关 │ ├── dsh-auth-gateway.mjs 网关本体(TLS + 密码 + 会话 + WS 隧道) │ ├── install-auth-gateway.sh 一键部署 + 生成注册密钥 + systemd │ ├── issue-ca-and-server-cert.sh 建 10 年 CA 并签发服务器证书 │ └── install-node-official.sh apt 只有 Node 12,改用官方二进制 └── tests/ ├── browser-flow-test.mjs 严格模拟浏览器 cookie 流转 └── test-skip-token.mjs 验证"只输密码即可进入 GUI"

方式②:SSH 反向隧道(取代 frp)

手机 ──ssh -L 18080:127.0.0.1:18080──► 服务器:22 ──隧道──► 电脑:18080 ──► dsh:3080

- 电脑执行 ssh -N -R 18080:127.0.0.1:18080 dsh-aliyun
- 服务器侧只得到 127.0.0.1:18080(不指定 bind 地址时 sshd 默认绑环回,且 GatewayPorts no)
- 公网只剩 22 一个端口;7000 与 18080 都可以从安全组删掉
- 掉线自愈:Start-SshTunnel.ps1 内置监督循环(PC 换网必掉线)

方式③:HTTPS 认证网关(手机只需浏览器)

手机 ──https(18443)──► 服务器网关(密码认证 + TLS) ──► 127.0.0.1:18080 ──► dsh:3080 (方式②建立的隧道)

网关的关键设计(都在 docs/UPDATES-2026-09-23.md 里详述):

1. 网关持有 dsh 会话,浏览器只持有网关会话。
dsh 的会话 cookie 按 authority 命名,网关改写 Host 后若原样透传 cookie,
浏览器会存在错误域名下、后续请求带不回去(表现为 authentication required)。
2. 转发时去掉 Origin、把 Host 改写为 127.0.0.1:18080 → 穿过 dsh 信任围栏。
3. 隧道 WebSocket 升级,否则会话列表为空、一直"自动重连中"。
4. token 自动上报:电脑上的 dsh-token-broadcast 插件用注册密钥把 token 上报到 /__gw_register,于是浏览器只输密码即可进入,无需粘贴 token。

四、端口与要放行的地方

| 端口 | 用途 | 谁监听 |
| 7000 | frpc 连入 frps | 云服务器 |
| 18080 | 手机访问的公网入口 | 云服务器 frps → 隧道 → 电脑 127.0.0.1:18080 |

要放行的只有两处(电脑侧不需要,因为是主动连出):

1. 云控制台安全组(网页操作,脚本无法代劳):入方向 TCP 7000 与 18080
2. 服务器自带防火墙(ufw / firewalld):部署脚本会自动放行

五、快速开始

整体八步,详见 docs/DEPLOY.md:

1. 注册 + 个人实名认证 → 领免费试用 ECS(2核2G,确认单价 ≤0.833 元/小时)
2. 安全组放行 7000、18080
3. 控制台「远程连接」里粘贴 src/server/aliyun-paste-command.sh → 记下打印的 token
4. 下载 frpc.exe,把 src/client/frpc.toml.template 复制为 frpc.toml 并填两个占位符
5. 手工跑一次 frpc,看到 start proxy success
6. 把公网 IP 加进 cordis.patch.yml 的 trustedHosts(两处),重启 dsh
7. 手机打开 http://:18080/?token=
8. 可选:用 src/client/ssh-key-setup.ps1 -Harden 关闭 SSH 密码登录

依赖说明:本项目需要电脑侧有一个监听 127.0.0.1:18080 的入口代理。
它由姊妹项目 dsh-lan-remote-access 的 dsh-entry-proxy.mjs 提供(多配一条 bindIp: 127.0.0.1 / port: 18080 的条目即可)。
两个项目建议一起部署。

六、最易漏的一步:信任围栏

dsh 的 /api 会比较 Host 与 Origin,并要求 authority 属于“环回或已声明可信”。
公网 IP 不写进去,手机访问一律 403,且任何代理都无法靠改写 Host 绕过。

- id: web-runtime
config:
trustedHosts:

- # 必须加
- id: connection
config:
trustedHosts:

- # 必须加(两处缺一不可)

七、远程进不去?先跑体检,别急着重启

2026-09-27 真实事故复盘见 docs/INCIDENT-2026-09-27-gateway-token-not-registered.md。

两个最容易误判的失败模式:

| 手机/浏览器上看到 | 真实原因 | 怎么办 |
| “网关尚未收到本次启动的 token” | 网关只在内存里存 token,dsh 重启后必须重新注册(由电脑上的 token-broadcast 插件完成)。注册漏一次,粘贴什么 token 都无效 | 补一次注册即可,不用重启 dsh |
| 页面能开、但一直“自动重连中”、会话列表空 | /api/remote.mux 的 WebSocket 没建起来。入口代理是长连接反代,dsh 重启后它仍指向旧实例(旧代理会回 502) | 重启入口代理(新版代理已自动跟随地址) |

体检工具(源码里不含任何真实地址,配置走环境变量 DSH_GW_HOST / DSH_GW_PORT / DSH_GW_KEY_FILE / DSH_ENTRY_PORT):

node tools/verify-gateway.mjs # 只体检:dsh 在不在、网关可达否、token 注册否、局域网入口通否
node tools/verify-gateway.mjs --register # 体检 + token 缺失时补注册

它把“进不去”拆成可判定的四段,直接告诉你是哪一段断了。

八、安全(详见 docs/SECURITY.md)

三道防线,缺一不可:

| 防线 | 保护什么 |
| ① 安全组只放行 7000 / 18080 | 减少暴露面 |
| ② frps auth.token | 防止陌生人往你的隧道注册代理 |
| ③ dsh 会话 token + 信任围栏 | 真正的访问控制 |

- frp token 由部署脚本随机生成,存于服务器 /opt/frp/frp-token(权限 600)。
- frps 的 allowPorts 只放开 18080 一个 remotePort,防止隧道被滥用。
- 入口代理不是鉴权层:它只负责转发,真正拦人的是第 ③ 道。
- 建议 SSH 改密钥登录并关闭密码(脚本 -Harden,且会立即复验,不会把你锁在门外)。

八、迁移

- 换服务器:新机器重跑部署脚本 → 改 frpc.toml 两行 → 改 trustedHosts → 重启 dsh。四步,十分钟。
- 换电脑:部署姊妹项目 → 拷 frpc.toml → 配 trustedHosts。

详见 docs/MIGRATION.md。

许可证

MIT,见 LICENSE。
预览分享卡片长什么样 ↓MaybeMeibeMaybi/dsh-aliyun-relay-access
分享 · DeepSeek Harness Hub
MaybeMeibeMaybi/dsh-aliyun-relay-access

让手机随时远程打开电脑上的 dsh 界面

这是你的仓库?认领条目

回到顶部