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

钥匙串凭据 nengong-ai/dsh-keychain-credentials

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

把 API 密钥与凭据存进 macOS 登录钥匙串

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

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

自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add nengong-ai/dsh-keychain-credentials
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

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

未发布到 npm registry,仅可从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-keychain-credentials(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

可执行外部命令
查看扫描证据(共 1 处,展示前 1 条)
  • 执行外部命令来自配置/变量
    src/index.js:66
    const child = execFile(SECURITY_BIN, args, { encoding: 'utf8' }, (error, stdout, stderr) => {
扫描于 2026/10/31(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-credentials@deepseek-ai/dsh-launch-environment@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 存储API密钥与凭据
  • 写入macOS登录钥匙串

纯 JavaScript 的 macOS Keychain 服务商,供 DeepSeek Harness(DSH)ctx.credentials 使用,同时支持 refs 和 records,磁盘上不存明文凭据。

README

由 DeepSeek 最新模型翻译生成
dsh-keychain-credentials 用于 DeepSeek Harness(dsh)的 macOS Keychain 凭据提供程序。 默认提供程序(dsh-credentials-local)将密钥存储在 $DSH_HOME/.credentials.yaml 中,权限为 0600。正如其自己的 README 所述:该文件对其他操作系统用户是受保护的,但对模型不是——工具进程(bash、文件系统工具)以同一用户身份运行,可以像读取任何其他文件一样读取它。 此提供程序将密钥移入 macOS 登录钥匙串。一个不存在的文件无法被 cat;不会有任何内容落入备份、同步文件夹或 git 中。 这为你带来了什么 - 已修复: 密钥不再是一个文件。默认文件可被模型拥有的每一种读取原语访问——read、cat、grep、tar、node -e …,无论进程内还是子进程。使用此提供程序后,值存放在登录钥匙串中。 - 未修复(诚实地说): 当登录钥匙串处于解锁状态时(登录后的默认状态),任何同一用户的进程都可以通过调用 /usr/bin/security 读取该项——该 CLI 受 ACL 信任,不会出现提示。一个拥有不受限 shell 且知道去询问钥匙串的代理仍然可以窃取。
展开完整文档(README 剩余 1 节)
dsh-keychain-credentials

用于 DeepSeek Harness(dsh)的 macOS Keychain 凭据提供程序。

默认提供程序(dsh-credentials-local)将密钥存储在 $DSH_HOME/.credentials.yaml 中,权限为 0600。正如其自己的 README 所述:该文件对其他操作系统用户是受保护的,但对模型不是——工具进程(bash、文件系统工具)以同一用户身份运行,可以像读取任何其他文件一样读取它。

此提供程序将密钥移入 macOS 登录钥匙串。一个不存在的文件无法被 cat;不会有任何内容落入备份、同步文件夹或 git 中。

这为你带来了什么

- 已修复: 密钥不再是一个文件。默认文件可被模型拥有的每一种读取原语访问——read、cat、grep、tar、node -e …,无论进程内还是子进程。使用此提供程序后,值存放在登录钥匙串中。
- 未修复(诚实地说): 当登录钥匙串处于解锁状态时(登录后的默认状态),任何同一用户的进程都可以通过调用 /usr/bin/security 读取该项——该 CLI 受 ACL 信任,不会出现提示。一个拥有不受限 shell 且知道去询问钥匙串的代理仍然可以窃取。与限制工具子进程的沙箱配合可以缩小这一范围;硬边界需要操作系统级别的隔离(一个带有私有访问组的已签名代理,例如 keyringseam,或一个单独的操作系统用户)。

净效果:门槛从“任何读取原语”提高到“必须以同一用户身份执行 /usr/bin/security”——这是真正的改进,而非完整的边界。

为什么选这个,而不是其他

- 完整的接缝覆盖: 实现了 ctx.credentials 的两半——refs(API 密钥)和 records(结构化凭据,如 client-connection/browser-session 授权)。其他几个提供程序只实现了 refs 这一半,这意味着 DSH 自身的会话记录会回退到明文文件。
- 零构建步骤: 纯 JavaScript,无需 Swift,无需代码签名证书,无需 Xcode。安装即用。
- 无认证提示: 读取和写入从不要求用户进行 Touch ID / 密码验证。(这是一个有意的取舍:keyringseam 提供设备所有者认证,代价是每次操作都要弹出提示。)

要求

- macOS(/usr/bin/security)
- DeepSeek Harness ≥ 0.1.0-rc.6

安装

dsh plugin --profile web add dsh-keychain-credentials
or from source:
dsh plugin --profile web add github:/dsh-keychain-credentials

然后该 bundle 的 cordis.patch.yml 会禁用默认提供程序并挂载此提供程序。如果你更愿意手动接线,请添加到你的补丁层(~/.dsh/cordis.patch.yml 或 --patch ):

- id: credentials
disabled: true
- insert:
- id: credentials-keychain
name: dsh-keychain-credentials
config:
servicePrefix: dsh-credentials # keychain service prefix
account: dsh # keychain account name

用法存储一个密钥(account = 凭据引用名称):

security add-generic-password -U -s dsh-credentials -a DEEPSEEK_API_KEY -w 'sk-…'

LLM 适配器按请求解析该引用——轮换后无需重启。

遵循接缝契约的语义:

- 进程环境会遮蔽钥匙串(每次运行的运维意图优先)。
- 存储的值为空视为不存在。
- 当只读来源(环境)遮蔽该引用时,set/unset 会被拒绝。
- describe 检查是否存在而不读取值——状态查询绝不会将明文拉入 agent 进程。
- 来自 security CLI 的错误经过净化:仅保留退出码和 stderr,绝不包含命令行(在 set 失败时命令行会携带密钥)。
- 密钥始终通过 stdin 而非 argv 传给 security,因此绝不会出现在 ps 中。
- 超过 128 字节的值通过 security -i 写入,而非 stdin 密码提示:该提示最多存储 128 字节,并会静默截断更长的内容。交互模式没有此限制,但不会报告失败退出码,因此这些写入会通过回读该值来确认。(DSH 作为 records 条目存储的账户令牌就是这样一个值。)

测试

npm test

需要真实的 DSH node_modules(peer 依赖)——从已安装 @deepseek-ai/dsh-credentials 的 profile 中运行,或符号链接一个。

许可证

MIT
预览分享卡片长什么样 ↓nengong-ai/dsh-keychain-credentials
分享 · DeepSeek Harness Hub
nengong-ai/dsh-keychain-credentials

把 API 密钥与凭据存进 macOS 登录钥匙串

回到顶部