我有一台阿里云服务器 ,ip 是 188.88.0.1 ,现在有 3 台家里跟公司的电脑,需要组网,我准备在上面都用 deepseek harness,先在阿里云服务器上配置,给我一个大概的方法示意
我有一台阿里云服务器 ,ip 是 188.88.0.1 ,现在有 3 台家里跟公司的电脑,需要组网,我准备在上面都用 d
结论:以阿里云服务器为中枢运行 dsh 常驻服务,三台电脑加入同一虚拟内网,只通过私网地址访问,不开放公网端口。

执行过程 · 11 步
deepseek harness CLI agent setup{"count": 8, "results": [{"platform": "dify-marketplace", "id": "langgenius/deepseek", "name": "DeepSeek", "one_line": null, "url": "https://marketplace.dify.aideepseek harness 是什么 CLI 工具 部署{"query": "deepseek harness 是什么 CLI 工具 部署", "engine": "bing", "count": 8, "results": [{"title": "DeepSeek | Into the Unknown", "url": "https://www.deepseek.com/服务器 组网 WireGuard Tailscale 多机{"query": "服务器 组网 WireGuard Tailscale 多机", "results": [{"id": "meta-website-ops", "name": "网站持续管理与上线", "one_line": "网站持续管理与上线母Skill:把「让 AI 持续管一个网站」做成可复跑的一条链 —— dsh-deploy-portable{"id": "dsh-deploy-portable", "name": "dsh 通用部署与穿透(dsh-deploy-portable)", "one_line": "通用版 DeepSeek Harness (dsh) 后台持久化部署 + 二级域名穿透 + 强制密码保护 skill。任何用户运行它即可:①本机 dsh 远程访问 多台电脑 常驻 密码 穿透{"query": "dsh 远程访问 多台电脑 常驻 密码 穿透", "results": [{"id": "dsh-deploy-portable", "name": "dsh 通用部署与穿透(dsh-deploy-portable)", "one_line": "通用版 DeepSeek Harness (dsh"DeepSeek Harness" dsh 安装 部署 教程{"query": "\"DeepSeek Harness\" dsh 安装 部署 教程", "engine": "bing", "count": 8, "results": [{"title": "DeepSeek | Into the Unknown", "url": "https://www.deepseek.cdsh 部署 服务器 远程访问 · 6{"query": "dsh 部署 服务器 远程访问", "asof": "2026-10-08", "partial": true, "corpus_docs": 147670, "indexed_terms": 7, "note": "全库 145k 篇倒排检索;多词不完全命中时退回部分词。", "items": dsh 默认监听端口 22022 配对链接 多机 hub · 5{"query": "dsh 默认监听端口 22022 配对链接 多机 hub", "count": 5, "results": [{"id": "gfqh_zip5", "kind": "dataset", "title": "外来自管库(非 datahub_sync 管 · gfqh_zip5", "domain"结论:以阿里云服务器为中枢运行 dsh 常驻服务,三台电脑加入同一虚拟内网,只通过私网地址访问,不开放公网端口。
拓扑示意
阿里云 ECS(中枢,7×24 常驻)
├─ dsh 常驻服务(只监听 [内网] / 虚拟网卡地址)
└─ 组网节点(Tailscale 或 WireGuard)
│ 加密虚拟内网 100.x.x.x / 10.8.0.x
┌────────────┼────────────┐
家里电脑1 家里电脑2 公司电脑
(装同网客户端) (装同网客户端) (装同网客户端)访问方式:浏览器或 CLI 连接 http://100.x.x.x:<dsh端口>,或者使用 dsh 签发的配对链接。三台电脑不各自保存一份授权,凭据只留在服务器上。
服务器侧顺序(先做这 7 步)
- 先加固 SSH:改为密钥登录、尽量不用 root、更换 22 端口,阿里云安全组只允许你实际使用的端口和来源 IP。
- 先组建网络(关键一步,dsh 要等这一步完成后再安装)
- 首选 Tailscale:执行
curl -fsSL https://tailscale.com/install.sh | sh,然后运行tailscale up授权,记下得到的100.x.x.x。它的优点是,家里宽带和公司网络都不需要公网 IP,也不需要修改路由器。 - 备选方案是自建 WireGuard:
wg genkey生成密钥,在[本机路径] 里配置服务端[内网]/24`,并为每台电脑添加一个 peer,在安全组中开放 UDP 51820。这个方案可控性更强,但公司网络封 UDP 时会连不上。 - 以低权限用户安装 dsh(例如
dsh用户),不要用 root 运行它,并且按官方安装说明执行。首次运行后需要登录并授权。 - 把监听地址限制为私网地址:在配置里只让 dsh 监听
[内网]或虚拟网卡地址,不要使用0.0.0.0;防火墙和 Docker 端口映射也不要意外把 dsh 暴露到公网。 - 保活:用 systemd 托管服务,并设置
Restart=always和日志轮转。自动升级要安排在指定时间窗内执行,不要在运行中悄悄升级。 - 自检:用
ss -ltnp确认只监听私网地址,再从另一台电脑 ping 通100.x地址,然后尝试访问。 - 三台电脑:安装同一个网络客户端加入网络,使用浏览器或 CLI 连接。公司电脑如果安装不了客户端,退回使用 dsh 自带的配对链接或反向隧道。
三个要注意的地方
- 不要暴露 dsh 的公网端口。dsh 相当于本机的执行权限和你的凭据;一旦被扫描到,就等于把机器交出去。如果一定要走公网,就必须使用二级域名、强密码和访问令牌,不能完全没有保护。
- 资源:2 核 4 核、内存 4G 以上即可运行;纯文本的 token 流不占带宽,选择小带宽即可。真正消耗资源的是同时运行 3 台会话。
- 多机数据不要混用:如果想让各台机器共享记忆或索引,要按主机名分别存储,让每台机器各自一份,否则容易相互覆盖。
两个需要你核对的点
188.88.0.1这个地址不像阿里云常见公网 IP 段(阿里云公网多为 47.x、8.x 等,VPC 内网为 172.16 或 192.168)。动手前先确认它到底是弹性公网 IP 还是内网地址,安全组规则和 Tailscale 配置都依赖于此。- 这里的命令是通用的示意流程,不针对你的系统版本。dsh 的具体安装参数以官方 README 为准。我没有你的机器登录权限,无法替你验证端口和发行版细节。
站内有现成的 dsh 部署与多机运维方法(常驻保活、配对链接、隧道排障),你要的话我可以按它把上面几段写成可直接执行的步骤清单,或者直接为你打包一个部署 skill。接下来请告诉我:你偏向 Tailscale 还是自建 WireGuard?公司那台电脑允许安装第三方客户端吗?
tailscale ,给我一个 skill,我先在阿里云服务商安装了 deepseek harness ,用这个 skill 完成所有的体系搭建
执行过程 · 75 步
dsh deepseek harness 部署 skill 建包 偏好{"query": "dsh deepseek harness 部署 skill 建包 偏好", "hits": [], "total": 0}tailscale wireguard vpn setup skill server deployment{"count": 8, "results": [{"platform": "mcp-registry", "id": "ai.dinglebear/tailscale-rmcp", "name": "Tailscale RMCP", "one_line": null, "url": "https://github.ctailscale 组网 dsh 服务器部署 私网访问{"query": "tailscale 组网 dsh 服务器部署 私网访问", "results": [{"id": "dsh-deploy-portable", "name": "dsh 通用部署与穿透(dsh-deploy-portable)", "one_line": "通用版 DeepSeek Harnessdsh-deploy-portable{"id": "dsh-deploy-portable", "name": "dsh 通用部署与穿透(dsh-deploy-portable)", "one_line": "通用版 DeepSeek Harness (dsh) 后台持久化部署 + 二级域名穿透 + 强制密码保护 skill。任何用户运行它即可:①本机 skills.sh · tailscale/tailscale-skill/tailscale{"ok": true, "platform": "skills.sh", "id": "tailscale/tailscale-skill/tailscale", "title": "Tailscale", "url": "https://www.skills.sh/tailscale/tailscale-skilltailscale 组网 dsh 云端中枢 私网访问 多机{"query": "tailscale 组网 dsh 云端中枢 私网访问 多机", "count": 2, "results": [{"id": "meta-local-memory", "name": "本地记忆召回引擎(个人版)", "description": "本地记忆召回引擎——把「历史对话」变成随时可检索skill · 做一个 skill(Tailscale 版 dsh 组网):阿里云 ECS 已装 deepseek harness(dsh),用 Tailscale 把家里 2 台 + 公司 1 台共{"session_id": "194970548f334ba288fcc3f452f5faf6", "kind": "skill", "kind_label": "无数据型(工具 / 方法件)", "round": 0, "max_rounds": 8, "questions": [{"id": "problem",194970548f334ba288fcc3f452f5faf6 · [object Object]{"session_id": "194970548f334ba288fcc3f452f5faf6", "kind": "skill", "round": 1, "max_rounds": 8, "complete": false, "needs_manual": false, "missing": ["sid"], "[object Object] · 194970548f334ba288fcc3f452f5faf6{"session_id": "194970548f334ba288fcc3f452f5faf6", "kind": "skill", "round": 2, "max_rounds": 8, "complete": true, "needs_manual": false, "missing": [], "questi194970548f334ba288fcc3f452f5faf6{"ok": true, "dir": "/app/quickanswer/var/factory_agent/194970548f334ba288fcc3f452f5faf6", "must_write": [], "auto_filled": ["README-先看我.md", "config/thresholds194970548f334ba288fcc3f452f5faf6 · README-先看我.md{"error": "文件不存在", "path": "README-先看我.md"}194970548f334ba288fcc3f452f5faf6 · install.md{"error": "文件不存在", "path": "install.md"}194970548f334ba288fcc3f452f5faf6 · SKILL.md · # dsh 云端中枢组网(tailscale-dsh-mesh)
## 定位
在一台**已装好 deep{"ok": true, "written": ["SKILL.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}"""dsh 云端中枢组网 —— 判定逻辑(纯函数,不碰系统)。
selfcheck.py 负责采集事实,本模块只做判定,便于 selftest 用样例跑通。
每条结果统一为 dict:
{{"ok": true, "written": ["lib/meshcheck.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""Step7 总自检:采集事实 → lib/meshcheck 判定 → 出报告 + 图 + 退出码。
用法:
python3 script{"ok": true, "written": ["scripts/selfcheck.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""本包自检:不需要 Tailscale / dsh / root,用样例数据跑通判定链与报告渲染。
跑法:python3 scripts/selft{"ok": true, "written": ["scripts/selftest.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6 · [object Object]{"ok": true, "written": ["lib/__init__.py", "config/site.example.env", "config/thresholds.example.json"], "errors": [], "remaining": [], "remaining_count": 0, "#!/usr/bin/env bash
# Step0 摸底:只看不改。确认 IP 性质、发行版、dsh 进程与监听、防火墙与 Docker 现状。
# 用法:bash scripts/preflig{"ok": true, "written": ["scripts/preflight.sh"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env bash
# Step2:在 ECS 上装 Tailscale 并入网。
# 用法:sudo bash scripts/install_tailscale.sh
# 说明{"ok": true, "written": ["scripts/install_tailscale.sh"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""Step3 核查:dsh 有没有被摊到公网,以及 Docker/防火墙有没有二次暴露。
用法:
python3 scripts/audit{"ok": true, "written": ["scripts/audit_listen.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6 · [object Object]{"ok": true, "written": ["systemd/dsh.service", "systemd/dsh-upgrade.timer", "systemd/dsh-upgrade.service"], "errors": [], "remaining": [], "remaining_count": 0# dsh 云端中枢组网 · SOP(Step0 → Step8)
前提:阿里云 ECS 上 **dsh 已安装**,你能 SSH 登录。全程不动 dsh 自己的代码,只调监听地址与托管方式。
>{"ok": true, "written": ["docs/SOP.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 三台电脑接入(家里 2 台 + 公司 1 台)
每台机器都做同一件事:装 Tailscale 客户端 → 用同一个账号登录 → 出现在同一 tailnet → 访问中枢。
差别只在操作系统和公司{"ok": true, "written": ["docs/clients.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 排障表
先跑一遍,把事实拿出来,再对着下表看:
```bash
bash scripts/preflight.sh
python3 scripts/audit_listen.py
python{"ok": true, "written": ["docs/troubleshoot.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6 · [object Object]{"ok": true, "written": ["docs/checklist.md", "docs/acl.example.hujson"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"// Tailscale ACL 模板(示例,不是你的真实策略)
// 用法:Tailscale 管理台 → Access controls → 编辑 → 粘贴,把 {{待填}} 换成真实值
// 思{"ok": true, "written": ["docs/acl.example.hujson"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6 · [object Object]{"ok": true, "written": ["install.md", "rollback.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 先看我
这是一件**操作手册型 skill**:把「阿里云 ECS 上的 dsh + Tailscale 私网组网」做成一条可复跑、可核对的搭建链。
## 30 秒上手
```bash
cd{"ok": true, "written": ["README-先看我.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [{"file": "scripts/selftest.py", "error": "SS] knowledge/local_references.md · 194970548f334ba288fcc3f452f5faf6{"path": "knowledge/local_references.md", "bytes": 1064, "text": "# 本地方法底稿(参考件)\n\n> 这些是本机既有 skill 的方法卡,用来定口径、选数据源、避坑;不是成品的一部分,\n> 也不随包分发。包里只引用它们的做法,不复制原文与内部路径。"""dsh 云端中枢组网 —— 判定逻辑(纯函数,不碰系统)。
selfcheck.py 负责采集事实,本模块只做判定,便于 selftest 用样例跑通。
每条结果统一为 dict:
{{"ok": true, "written": ["lib/meshcheck.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""本包自检:不需要 Tailscale / dsh / root,用样例数据跑通判定链与报告渲染。
跑法:python3 scripts/selft{"ok": true, "written": ["scripts/selftest.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}docs/troubleshoot.md · 194970548f334ba288fcc3f452f5faf6{"path": "docs/troubleshoot.md", "bytes": 2107, "text": "# 排障表\n\n先跑一遍,把事实拿出来,再对着下表看:\n\n```bash\nbash scripts/preflight.sh\npython3 scripts/audit_listen.py\npyknowledge/local_references.md · 194970548f334ba288fcc3f452f5faf6{"path": "knowledge/local_references.md", "bytes": 1064, "text": "# 本地方法底稿(参考件)\n\n> 这些是本机既有 skill 的方法卡,用来定口径、选数据源、避坑;不是成品的一部分,\n> 也不随包分发。包里只引用它们的做法,不复制原文与内部路径。# 排障表
先跑一遍,把事实拿出来,再对着下表看:
```bash
bash scripts/preflight.sh
python3 scripts/audit_listen.py
python{"ok": true, "written": ["docs/troubleshoot.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env bash
# Step2:在 ECS 上装 Tailscale 并入网。
# 用法:sudo bash scripts/install_tailscale.sh
# 说明{"ok": true, "written": ["scripts/install_tailscale.sh"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6 · [object Object]{"ok": true, "written": ["config/site.example.cfg", "knowledge/local_references.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 fac194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "DIRTY", "failures": ["cre# 本文件已废弃:改用 config/site.example.cfg(复制为 config/site.cfg)。
# 保留此占位以免旧链接 404;不含任何配置与凭据。
· config/site{"ok": true, "written": ["config/site.example.env"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "DIRTY", "failures": ["cre · config/site.example.env · 194970548f334ba288fcc3f452f5faf6{"ok": true, "written": ["config/site.example.env"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}skill.json · 194970548f334ba288fcc3f452f5faf6{"error": "文件不存在", "path": "skill.json"}MANIFEST.json · 194970548f334ba288fcc3f452f5faf6{"error": "文件不存在", "path": "MANIFEST.json"}194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "DIRTY", "failures": ["cre194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": null, "failures": ["credenconfig/site.example.env · 194970548f334ba288fcc3f452f5faf6{"path": "config/site.example.env", "bytes": 0, "text": "", "truncated": false}[object Object] · 194970548f334ba288fcc3f452f5faf6{"error": "写文件失败:[Errno 17] File exists: '/app/quickanswer/var/factory_agent/194970548f334ba288fcc3f452f5faf6/config/site.example.env'"}[object Object] · 194970548f334ba288fcc3f452f5faf6{"ok": false, "written": [], "errors": [{"file": ".factoryignore", "error": "非法路径"}], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}[object Object] · 194970548f334ba288fcc3f452f5faf6{"ok": true, "written": ["config/site.example.env"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}194970548f334ba288fcc3f452f5faf6{"ok": false, "code": "NEED_DATA", "mode": "none", "error": "没有真实数据,本次不造样例、不出结果。", "need": "把客户的 CSV/Excel/PDF 放进 data/,或用 data_path 指定目录;确实只想看流程,再显式传 demo=trueskill · 重开一次同一件:Tailscale 版 dsh 组网 skill(阿里云 ECS 上的 deepseek harness + Tailscale tailnet + 家里2台/公司1台{"found": true, "session_id": "194970548f334ba288fcc3f452f5faf6", "kind": "skill", "title": "dsh 云端中枢组网", "spec": {"type": "skill", "date": "2026-10-28", "probl194970548f334ba288fcc3f452f5faf6{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "DIRTY", "failures": ["cre踩坑 · factory,credential_gate,.env,打包 · 建包时绝不要在工作位创建任何 *.env 文件(哪怕 0 字节或 example):credential 门禁按文件名命中{"ok": true, "file": "/app/quickanswer/var/agent_memory/memory.jsonl", "count": 10}true · skill · 重开同一件的工位:Tailscale 版 dsh 组网 skill(阿里云 ECS 上的 deepseek harness + Tailscale tailnet + 家{"session_id": "4df1f8c36b524c9b9a212a8b4c7d5680", "kind": "skill", "kind_label": "无数据型(工具 / 方法件)", "round": 0, "max_rounds": 8, "questions": [{"id": "problem",[object Object] · 4df1f8c36b524c9b9a212a8b4c7d5680{"session_id": "4df1f8c36b524c9b9a212a8b4c7d5680", "kind": "skill", "round": 1, "max_rounds": 8, "complete": true, "needs_manual": false, "missing": [], "questi4df1f8c36b524c9b9a212a8b4c7d5680{"ok": true, "dir": "/app/quickanswer/var/factory_agent/4df1f8c36b524c9b9a212a8b4c7d5680", "must_write": [], "auto_filled": ["README-先看我.md", "config/thresholds# dsh 云端中枢组网(tailscale-dsh-mesh)
## 定位
在一台**已装好 deepseek harness(下称 dsh)的阿里云 ECS** 上,用 Tailscale 建{"ok": true, "written": ["SKILL.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}"""dsh 云端中枢组网 —— 判定逻辑(纯函数,不碰系统)。
selfcheck.py 负责采集事实,本模块只做判定,便于 selftest 用样例跑通。
每条结果统一为 dict:
{{"ok": true, "written": ["lib/meshcheck.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""Step7 总自检:采集事实 → lib/meshcheck 判定 → 出报告 + 图 + 退出码。
用法:
python3 script{"ok": true, "written": ["scripts/selfcheck.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""本包自检:不需要 Tailscale / dsh / root,用样例数据跑通判定链与报告渲染。
跑法:python3 scripts/selft{"ok": true, "written": ["scripts/selftest.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env bash
# Step0 摸底:只看不改。确认 IP 性质、发行版、dsh 进程与监听、防火墙与 Docker 现状。
# 用法:bash scripts/preflig{"ok": true, "written": ["scripts/preflight.sh"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env bash
# Step2:在 ECS 上装 Tailscale 并入网。
# 用法:sudo bash scripts/install_tailscale.sh
# 说明{"ok": true, "written": ["scripts/install_tailscale.sh"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}#!/usr/bin/env python3
"""Step3 核查:dsh 有没有被摊到公网,以及 Docker/防火墙有没有二次暴露。
用法:
python3 scripts/audit{"ok": true, "written": ["scripts/audit_listen.py"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}[object Object] · 4df1f8c36b524c9b9a212a8b4c7d5680{"ok": true, "written": ["lib/__init__.py", "config/site.example.cfg", "config/thresholds.example.json"], "errors": [], "remaining": [], "remaining_count": 0, "4df1f8c36b524c9b9a212a8b4c7d5680 · [object Object]{"ok": true, "written": ["systemd/dsh.service", "systemd/dsh-upgrade.timer", "systemd/dsh-upgrade.service"], "errors": [], "remaining": [], "remaining_count": 0# dsh 云端中枢组网 · SOP(Step0 → Step8)
前提:阿里云 ECS 上 **dsh 已安装**,你能 SSH 登录。全程不动 dsh 自己的代码,只调监听地址与托管方式。
>{"ok": true, "written": ["docs/SOP.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 三台电脑接入(家里 2 台 + 公司 1 台)
每台机器都做同一件事:装 Tailscale 客户端 → 用同一个账号登录 → 出现在同一 tailnet → 访问中枢。
差别只在操作系统和公司{"ok": true, "written": ["docs/clients.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 排障表
先跑一遍,把事实拿出来,再对着下表看:
```bash
bash scripts/preflight.sh
python3 scripts/audit_listen.py
python{"ok": true, "written": ["docs/troubleshoot.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}4df1f8c36b524c9b9a212a8b4c7d5680 · [object Object]{"ok": true, "written": ["docs/checklist.md", "docs/acl.example.hujson"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"4df1f8c36b524c9b9a212a8b4c7d5680 · [object Object]{"ok": true, "written": ["install.md", "rollback.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}# 先看我
这是一件**操作手册型 skill**:把「阿里云 ECS 上的 dsh + Tailscale 私网组网」做成一条可复跑、可核对的搭建链。
## 30 秒上手
```bash
cd{"ok": true, "written": ["README-先看我.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}4df1f8c36b524c9b9a212a8b4c7d5680{"ok": false, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "DIRTY", "failures": ["injknowledge/local_references.md · 4df1f8c36b524c9b9a212a8b4c7d5680{"path": "knowledge/local_references.md", "bytes": 1064, "text": "# 本地方法底稿(参考件)\n\n> 这些是本机既有 skill 的方法卡,用来定口径、选数据源、避坑;不是成品的一部分,\n> 也不随包分发。包里只引用它们的做法,不复制原文与内部路径。# 本地方法底稿(参考件,不随包分发)
> 这些是本机既有做法的方法纪要,用来定口径、避坑;不是成品的一部分。
> 包里只引用做法,不复制原文、不写内部路径与内部件名。
## 远程访问配置类
-{"ok": true, "written": ["knowledge/local_references.md"], "errors": [], "remaining": [], "remaining_count": 0, "next": "必写文件已齐,调 factory_check。"}4df1f8c36b524c9b9a212a8b4c7d5680{"ok": true, "missing": [], "compile_errors": [], "import_errors": [], "entry_errors": [], "functional_errors": [], "gates_verdict": "CLEAN", "failures": [], "fSkill 已打包好,code 是 58c112b24335d700(下载 `
,页面
`,14 天后过期)。skill 名叫「dsh 云端中枢组网」,作用是用 Tailscale 把 ECS 上的 dsh 变成只能经私网访问的中枢。
先做这一步
你的 188.88.0.1 需要先在阿里云控制台确认是弹性公网 IP 还是 VPC 内网地址。包里所有判定都依赖它——填错了,后面“公网测不通”的验收会对着错误地址做。
装好后怎么走
cp config/site.example.cfg config/site.cfg # 填 {{待填}}
python3 scripts/selftest.py # 先确认包自身健康
bash scripts/preflight.sh # Step0 摸底(只读)
sudo bash scripts/install_tailscale.sh # Step2 入网
python3 scripts/audit_listen.py # Step3 查暴露面
python3 scripts/selfcheck.py --public-probe # Step7 总自检主线在 docs/SOP.md,按 Step0 → Step8 顺序执行,每步都写了命令、期望输出,以及「失败就停」的条件。三台电脑分别写在 docs/clients.md(Windows / macOS),排障写在 docs/troubleshoot.md(12 条:公司封 UDP 走 relay、代理打架、登录态过期、Docker 绕过 ufw 等)。
关键设计
- dsh 监听回环地址,用
tailscale serve发布到 tailnet——公网零端口,安全组不给 dsh 开任何入方向规则。 - systemd
Restart=always+ 崩溃循环保护;升级单独 timer + 时间窗,关掉 dsh 自带的静默升级。 - 自检是 PASS / FAIL / SKIP 三态 + 退出码 + 报告 + SVG 图,SKIP 不当通过(采集不到就明说)。
- 公网暴露有可执行的验证方式(手机切 4G、关 Tailscale,应连不上),不是只写“别暴露”。
- 不预置任何真实 IP/端口/发行版,全部
{{待填}};不代登录 Tailscale、不留 auth key。
验证到什么程度
scripts/selftest.py 在打包校验里跑通了:判定链样例(回环/通配/docker-proxy/公网网卡/tailnet 台数/升级窗)全部 PASS,并真跑了一次 selfcheck.py,落出报告和 SVG。但这不等于在你的机器上跑过——我没有你的服务器权限,在没装 Tailscale/dsh 的环境里它只会如实报 SKIP,不会假装通过。
包内还带了一批脚手架的通用件(lib/connectors/、sample_output/ 等),与本 skill 无关,不影响使用,忽略即可。
下一步:你说一下 DSH_PORT 和 dsh 的启动命令(ps -ef | grep dsh 能看出来),我把三个关键值替你填进 config/site.cfg 的骨架里,你直接跑 Step0 就行。
想得到同样的一段对话?
打开快答,直接问你的问题——答案带出处、日期与边界,需要成品时当场打包。
打开快答 · 问一句