error: --host 0.0.0.0 is intentionally not supported yet for safety 报错:DSH plugin 安全限制排查
这条报错的完整原文是「error: --host 0.0.0.0 is intentionally not supported yet for safety: it would expose remote code execution to the network; use 127.0.0.1 instead」——报错 X → 执行 W:别再试绑定全网卡,改用默认的 127.0.0.1 起服务,再通过 SSH 隧道从本机访问(来源)。 它不是用法失误,而是官方的安全决策:dsh web 能以 Host 用户权限执行命令、读写本机文件,绑到 0.0.0.0 就等于把远程代码执行能力交给整个网络。远程连接方式的完整讲法在《dsh ssh 怎么远程连接》,本篇专打这条安全限制报错。
「--host 0.0.0.0 is intentionally not supported yet for safety」报错是什么意思
它表示你给 dsh web 传了 --host 0.0.0.0,而 CLI 故意不支持这个绑定,因为那会把具备命令执行能力的 Web 界面暴露到网络,所以直接以错误退出(来源)。 三个关键点:
intentionally not supported是「有意不支持」 —— 这是官方刻意的设计,不是尚未实现的缺口,别等它「以后支持」。for safety点明了动机 —— 拒绝的理由是安全:绑定全网卡会暴露远程代码执行能力。use 127.0.0.1 instead已经给出正解 —— 官方让你用回环地址,也就是默认行为。
先看清默认行为与非法改动的差别:
| 用法 | 结果 | 说明 |
|---|---|---|
dsh web(默认) | 正常监听 127.0.0.1:3080 | 只有本机能访问 |
dsh web --port 8080 | 正常,改端口 | 端口可改,绑定地址不可改 |
dsh web --host 0.0.0.0 | 报这条安全错误 | 官方拒绝,属于用法错误 |
dsh web --trusted-host <主机名> | 正常,限制来源 | 用于信任特定主机,不是开放全网 |
一句话:端口随你改,绑定地址没得商量——127.0.0.1 是唯一的受支持绑定。
报这个错该怎么办:改用默认的 127.0.0.1
看到这条报错,正解只有一个:别再传 --host 0.0.0.0,用回环地址(也就是 dsh web 的默认行为)把 DeepSeek Harness 起起来;要从另一台机器访问,就走 SSH 隧道,而不是改绑定。 隧道怎么建、回环为何够用,属于远程访问方向的既有题面——《dsh ssh 怎么远程连接》逐条写了服务器侧起服务、ssh -L 3080:127.0.0.1:3080 <用户>@<服务器>、本机打开带 ?token= 的地址,以及用可重复的 --trusted-host 限制来源主机;本篇只留这条安全限制报错本身。
别忘了区分它和端口占用: 这条是安全拒绝,与 3080 被占用导致的打不开完全是两回事,后者见《127.0.0.1:3080 打不开、访问被拒排查》。
为什么这么设计:远程代码执行风险与官方取舍
核心原因只有一条:dsh web 是一个能执行命令、读写本机文件的界面,一旦匿名可达就等于把机器控制权交出去,所以官方用「拒绝绑定」来守住底线,而不是靠事后加认证(来源)。 逐层看:
- 能力即风险 —— 界面带着本机的文件与命令执行能力,能做的事越多,暴露的后果越重。
- 没有 TLS 与代理约定 —— 官方没有为「把服务直接暴露到网络」提供 TLS、转发 header 解释或代理配置支撑,贸然开放等于裸奔。
- 认证解决的是「谁能在本机用」 —— 启动令牌是给「已经能到达本机」的人用的,它不等于「可以安全开到公网」。
- 宁拒绝不暗示 —— 与其提供一个容易被误用的开关,官方选择在参数层直接拒绝,避免让人以为「绑定全网卡」是受支持的部署方式。
边界条件要说清:这条限制是官方决策,任何绕过(改环境变量、用插件替换启动器、反向代理直推)都超出受支持范围。真要做局域网或公网访问,先用 SSH 隧道这类加密通道,并在评估风险后再决定;远程访问的整体安全前提已在《dsh ssh 怎么远程连接》里讲过。
排查 DSH plugin 远程访问报错前的须知
在远程环境里装任何 DSH插件 之前,先把「连接方式是否受支持」确认清楚,能免掉一次注定失败的尝试。 三条须知:
- 受支持的连法只有 SSH 隧道 —— 别去和
--host 0.0.0.0较劲,把精力放在隧道与令牌上。 - 令牌一次性、别外传 —— 带
?token=的地址会留在历史里,取到后立刻换成会话 cookie,别截图外发。 - 服务只该待在回环里 —— 确认
dsh web绑定的是127.0.0.1;远程进去后要补插件,用 DSH Plugin Hub 在界面里挑即可,不必在隧道两端来回敲命令。
使用 DSH plugin 的注意事项与局限
- 绑定地址不可改 ——
127.0.0.1与拒绝--host 0.0.0.0是官方决策,任何绕过都超出受支持范围。 - 端口可以改、地址不能改 ——
--port随意,--host只有回环受支持,两者别混为一谈。 - 令牌每次启动都变 —— 远程访问每次都要从服务器终端重新取一次带令牌的地址,无法预先收藏。
- 常驻要自己托管 —— 官方未提供服务化方案,长期运行请用终端复用器或系统服务自行托管。
- 报错文案以官方版本为准 —— 措辞可能随版本微调,但「拒绝绑定全网卡」这一点不会变。
与其为了远程访问去绕过官方的绑定限制、把服务推到网上,不如就在受支持的回环里用 DSH Plugin Hub 把远程环境打理好:确认安装弹窗让每一次安装都可核对,装了哪个、来自哪个仓库写得明明白白,比在隧道两端手敲包名稳当得多。

常见问题
DeepSeek Harness 的 dsh web 刻意拒绝绑定 0.0.0.0。把这台机器上具备文件读写与命令执行能力的 Web 界面暴露给整个网络,等于把远程代码执行能力送出去,属于官方明确要避免的风险,所以在参数层直接拦下。
DeepSeek Harness 受支持的远程访问方式是 SSH 本地端口转发:先在服务器上跑 dsh web(默认绑 127.0.0.1:3080),再在本机执行 ssh -L 3080:127.0.0.1:3080 <用户>@<服务器>,然后在本地浏览器打开服务器终端打印的带令牌地址。核心是隧道,不是改绑定。
对 DeepSeek Harness 来说这个绑定不能放宽,也不受支持。CLI 有意不支持 --host 0.0.0.0,同网段直连也不在受支持范围内;要限制来源主机,用可重复的 --trusted-host 添加受信主机名,而不是把服务推向全网。
对 DeepSeek Harness 来说,用反向代理把 3080 推出去同样超出受支持范围。官方没有为远程部署提供 TLS、转发 header 解释或代理配置支持;真要在受控网络里暴露,也应先评估远程代码执行风险,而不是默认它受支持。
DeepSeek Harness 把这条报成安全原因,是因为它保护的是「谁能执行命令」这条底线。dsh web 能以 Host 用户权限执行命令、读写本机文件,一旦匿名可达就等于交出机器控制权,所以官方宁可用硬性拒绝,也不暗示支持网络部署。
相关术语
- --host 0.0.0.0
- --host 0.0.0.0 是让服务绑定到所有网卡的启动参数;在 DeepSeek Harness 里它被明确拒绝,因为它会把 Web 界面连同远程代码执行能力暴露到网络。— dsh CLI README
- 远程代码执行(RCE)
- 远程代码执行指攻击者能在目标机器上运行任意命令;dsh web 以 Host 用户权限执行命令,若匿名可达即构成远程代码执行风险,这正是官方拒绝绑定 0.0.0.0 的原因。— dsh CLI README
- SSH 本地端口转发
- SSH 本地端口转发是用 ssh -L 把本机端口映射到远端回环地址的做法,让本机浏览器以为连的是本地端口,实际流量经加密隧道抵达服务器。— dsh CLI behavior reference
- --trusted-host
- --trusted-host 是 dsh web 可重复使用的参数,向 /api 浏览器信任栅栏加入受信主机名;它用于限制来源主机,不用于把服务暴露到网络。— dsh CLI behavior reference
来源
- dsh CLI README· deepseek-ai
- dsh CLI behavior reference· deepseek-ai