前言¶
在 DeepSeek Harness (DSH) 的开发环境中,智能体通常需要与 Git 服务(如 GitHub 或 GitLab)进行交互,或者使用 SSH 密钥进行部署。手动维护这些凭证容易出错且不够安全。dsh-git-auth 插件提供了一套统一的命令和配置,让智能体能够以非交互方式完成认证和密钥管理。
功能概览¶
该插件包含以下核心功能:
- 统一状态:在单次调用中报告
gh(GitHub CLI)、glab(GitLab CLI)、SSH-agent 以及公钥的状态。 - 非交互式登录:使用插件设置中配置的 Token 或 DSH 主机环境变量中的 Token,对
gh或glab进行认证登录。 - 工作区部署密钥:为每个工作区在
.ssh目录下生成、配置、列出和显示 Ed25519 类型的部署密钥。 - 审批感知写入:将密钥更改限制在工作区访问范围内,并对共享 CLI/代理的更改请求主机批准。
- 设置 UI:在 Settings → Plugins 中暴露主机、超时时间、密钥路径、注释以及
ssh-add的默认配置。
安装与启用¶
从源码克隆插件并添加到 DSH profile。
git clone https://github.com/Wisdoverse/dsh-git-auth-plugin.git
dsh plugin --profile web add ./dsh-git-auth-plugin
安装完成后,需要重启 Web profile。
配置¶
插件配置位于 Settings → Plugins → Plugin configuration,或直接编辑 DSH 的设置文档(通常为 $DSH_HOME/settings.yaml)。
主要配置项如下:
| 配置项 | 默认值 | 说明 |
|---|---|---|
ghHost |
github.com |
GitHub 主机名,可包含端口 |
glabHost |
gitlab.com |
GitLab 主机名,可包含端口 |
commandTimeoutMs |
60000 |
命令执行超时时间(毫秒) |
sshPath |
空 | 工作区 .ssh 目录下的直接子路径,空值默认为 <workspace>/.ssh/id_ed25519 |
sshComment |
空 | 传递给 ssh-keygen 的默认注释 |
sshAddAgent |
false |
是否默认使用 ssh-add 加载生成的密钥 |
配置示例:
git-auth:
glabHost: gitlab.example.com
commandTimeoutMs: 60000
sshPath: id_ed25519
sshComment: developer@example.com
sshAddAgent: true
典型用法¶
插件提供了以下工具命令:
auth_status:检查 GitHub、GitLab 和 SSH 认证状态。client_auth:使用配置的 Token 登录或登出gh或glab。ssh_key:生成、配置、列出或显示当前工作区的 Ed25519 部署密钥。
适用场景与注意事项¶
- Token 安全:访问令牌不得作为工具参数传入,必须保存在插件设置或 DSH 主机环境中,以避免进入模型上下文或工具调用日志。
- 单用户/互信环境:此发布版适用于单用户或相互信任的用户。主机、令牌、
gh/glab配置文件以及 SSH agent 由 DSH 实例共享。 - 密钥路径边界:工作区本地密钥路径仅用于路由,并非多用户安全边界。
- 全局令牌:在当前的 DSH 凭证模型中,令牌是实例全局的,因此所有工作区共享这些令牌。
总结¶
dsh-git-auth 解决了 DSH 环境下智能体与 Git 服务交互时的凭证管理问题。通过统一的命令接口和安全的 Token 存储机制,它支持非交互式登录和标准化的 SSH 密钥管理,适合需要在 DSH 实例中稳定进行 Git 操作的场景。