🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

gengwg/dsh-kubectl-guard

DeepSeek 客户端兼容 / 相关生态spec-screened扫描:中风险在 GitHub 查看 ↗
✓ 可直接安装

一个 DeepSeek Harness 策略插件,按 kubeconfig 上下文对 kubectl 进行管控。

自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node >=20);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/9/16 · 已提供中文文档

一个dsh策略插件,通过kubeconfig上下文对kubectl进行门控:在本地集群之外拒绝不可逆操作,其余操作则询问。

综合分
30.4
GitHub 分
30.4
用户评分
—
★ Stars
1
周下载量
—
兼容 / 相关生态插件(非 dsh 原生,请按其对应运行时安装)
git clone https://github.com/gengwg/dsh-kubectl-guard.git
信任档位:已验证本站已于 2 天前真实安装成功(L4 · 真实安装)
是什么
生态插件(可安装,未声明 dsh 能力)
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 9 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/24
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/19(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过

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

✓npm 包dsh-kubectl-guard @ 0.2.1
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 06:02:44

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-kubectl-guard

Awesome
Listed on dsh-plugin.org
npm

一个 DeepSeek Harness 策略插件,按 kubeconfig 上下文对 kubectl 进行管控。

针对非本地集群的不可逆操作会被直接拒绝。可恢复的写操作会先询问。读操作和本地集群不受影响。

它不注册自己的工具——它检查 shell 工具调用的 command 参数,因此无论 agent 运行什么都能覆盖。

安装

需要 pnpm,dsh plugin 会调用它。

从 npm 安装:

dsh plugin --profile web add dsh-kubectl-guard

从源码安装,如果你想修改它:

git clone https://github.com/gengwg/dsh-kubectl-guard
cd dsh-kubectl-guard
dsh plugin --profile web add "$PWD"

无论哪种方式,激活都是自动的:该包声明了 dsh.bundle,因此
dsh plugin add 会将其加入 profile 的 bundle 栈。重启 dsh 以加载它。

从 0.1.x 升级时(当时作为普通依赖安装):从
~/.dsh/profiles//cordis.patch.yml 中删除手动插入的条目。Bundle 层和用户
patch 层都会生效,所以保留它会导致 guard 被加载两次。

示例

无需调用任何东西。让 agent 做它的正常工作;guard 位于
工具流水线中,在 shell 命令运行前对其进行检查。

被阻止,集群名称被替换为每会话的假名:

delete the stuck nginx pod

Error: kubectl-guard: 'delete' is irreversible and ctx#4be1f92a is not a local
cluster. Denied.

被询问,因此你需要在 UI 中批准后它才会运行:

roll out the new deployment

kubectl-guard: 'apply' writes to ctx#4be1f92a, which is not a local cluster.
[approve] [deny]

不受影响,因为读操作不受管控:

what pods are failing in kube-system?

kubectl get pods -n kube-system --field-selector=status.phase!=Running
NAME         READY   STATUS             RESTARTS
api-7d9f8c   0/1     CrashLoopBackOff   14

不受影响,因为上下文是本地:

wipe the test namespace on my kind cluster

kubectl --context kind-dev delete ns test
namespace "test" deleted

Dry run 属于读操作,因此会通过,并给 agent 一种在请求批准前向你展示变更的方式:

kubectl apply --dry-run=server -f deploy.yaml     # allowed
kubectl apply -f deploy.yaml                      # asks

无需编辑配置即可为单个会话关闭 guard:

dsh web --patch <(echo '- id: kubectl-guard
disabled: true')

行为

| 命令 | 非本地上下文 | 本地上下文 |
|---|---|---|
| get、describe、logs、top | 允许 | 允许 |
| auth can-i | 允许 | 允许 |
| auth reconcile | 询问 | 允许 |
| config use-context、其他会修改状态的 config 子命令 | ask | ask |
| apply、patch、scale、exec | ask | allow |
| delete、drain、evict | deny | allow |
| scale --replicas=0 | deny | allow |
| apply --prune | deny | allow |
| replace --force | deny | allow |
| apply --dry-run=server | allow | allow |

只有当上下文匹配 localContexts 时,它才是本地上下文。其他所有情况,包括无法读取的 kubeconfig,都被视为生产环境。

上下文的解析方式与 shell 的解析方式一致:显式的
--context 优先,然后是 --kubeconfig,然后是在同一命令行中内联写入的
KUBECONFIG= 赋值,最后是环境变量。最后一种情况很重要——如果没有它,KUBECONFIG=/path/to/prod kubectl delete ... 将根据你的 shell 恰好指向的内容来判定。

配置

config:
localContexts: [minikube, 'kind-*', docker-desktop]
binaries: [kubectl, k]
guardedTools: [bash, pwsh]
showContextNames: false

showContextNames 默认关闭:被阻止命令的消息会发送给模型,因此也会发送给 LLM 提供商。关闭时,模型看到的是稳定的每会话假名,如 ctx#4be1f92a,而不是你的集群名称。

故障关闭

一个可以被绕过的门禁比没有更糟。任何无法解析的内容——sh -c、命令替换、未终止的引号——都被视为变更操作:如果文本包含不可逆动词则拒绝,否则询问。未知动词会询问而不是允许。

这不是什么

这约束的是一个配合的代理,而不是对手。它读取代理请求运行的命令字符串,
因此任何在该字符串中隐藏二进制名称的做法从构造上就能绕过它——$KUBECTL delete ... 且名称只在环境中、运行时解析的 shell 别名、base64 往返。

仍然包含字面名称的间接方式会被捕获:K=kubectl; $K
delete pod foo 会被拒绝,因为任何 $ 展开与受保护二进制名称同时出现都会使命令不透明,而不透明加上不可逆动词就是拒绝。但请把该防护视为防止混乱代理的安全带,而不是防止恶意代理的沙箱。如果你需要更强的属性,请拿走凭据,而不是过滤命令。

限制

- 仅支持 kubectl。helm、argocd 和 flux 未覆盖;动词表是数据,因此添加它们只需编辑 src/verbs.js。
- 透传包装器(sudo、time、nice、...)会被看穿,但只到裸令牌包装器参数为止:timeout 30 kubectl delete ... 不会被约束,因为 30 终止了包装器链。
- current-context 使用行锚定正则表达式读取,而不是 YAML 解析器。不可读或不匹配意味着生产环境,因此失败方向是安全的。
- 假名盐是每进程的:id 在会话内稳定,跨重启不稳定。
- 防护是同步的,因此拒绝路径除了缓存的 readFileSync 之外不做 I/O。

测试

npm test

MIT。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群