Skip to content

认证与连接

先明确目标 host

CLI 执行任何业务动作前,都需要先明确自己要连接哪一个 HENGSHI SENSE host。

bash
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login --device-login

HBI_HOST 可以直接写裸 host,也可以带二级路径,例如 platform.hengshi.org/bi。如果省略 scheme,CLI 会先探测 https://,失败后再试 http://

如果你需要在本机长期保存一个默认 host,可以使用下面这个本地便捷机制:

bash
# 最简单的本机默认 host 方式
hbi auth use --host "<你的-hengshi-sense-实例>"

auth use 更适合“我已经知道这个 host,只想把它设成当前机器的本地默认值”。如果你长期维护一组命名别名,也可以继续使用 instance add / instance use;但对脚本、Agent、多环境切换和 cron,更推荐始终显式传 HBI_HOST=... hbi xxx,不要把本机默认值机制当作主路径。

先记住一条对外心智模型(决策表):

场景推荐说明
本地人工终端 / 有人可以在浏览器批准(包括远程 openclaw / SSH)HBI_HOST=... hbi auth login --device-login需要在浏览器批准页确认;CLI 会按 当前 host 保存并复用可续期登录态
远程自动化 / 服务账号 / CIHBI_HOST=... HBI_CLIENT_ID=... HBI_CLIENT_SECRET=... hbi auth login使用 client credentials,可持续换取/刷新访问令牌
已有 client_id / client_secret,想直接在命令行传值(不走凭据 env 注入,也不提示输入)HBI_HOST=... hbi auth login --client-id "<client_id>" --client-secret "<client_secret>"(或短参数 -i/-s直接传入凭据值;-i/-sClient ID / Secret 的取值参数,不是交互式输入快捷键。仅建议在受控环境使用(避免 shell 历史泄露)
想在本机交互式输入并保存 client credentialsHBI_HOST=... hbi auth login --interactive仍属于 client credentials(direct credentials)路径:在当前机器提示输入并保存到系统钥匙串/本地凭据存储;不是第三套认证模型
已有现成 token,只做一次性覆盖HBI_TOKEN--token仅临时 override;不会创建可复用登录态,也不承诺自动续期/刷新

说明:这里的 “openclaw / SSH” 仅表示 CLI 运行在远程机器/容器里;浏览器批准页可以在任意有浏览器的设备上完成,不要求远端能打开浏览器。

对外文档统一使用 HBI_* 环境变量。

方式一:优先使用浏览器 device login

这是默认推荐路径,最接近 gh auth login / glab auth login 的心智模型:先显式指定 host,再完成登录。

最小可用示例

bash
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login --device-login

# 等价入口:直接进入 auth device-login 子命令
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth device-login

典型输出

Device login initiated.
Please visit: https://<你的-hengshi-sense-实例>/auth/device
Enter this code: ABCD-1234

Waiting for authorization...

hbi auth login --device-loginhbi auth device-login 走的是同一条 device login 流程;前者更适合放在统一的 auth login 心智模型里理解,后者更适合你已经明确要走浏览器批准流时直接调用。

完成后,CLI 会把当前 host 的登录态缓存到本地,后续同一 host 的命令会自动复用。

即使你是在远程终端(openclaw / SSH / 跳板机 / 容器)里运行 CLI,也依然推荐走 --device-login:只要有人能在任意浏览器里打开批准页并确认即可。远端 CLI 只需要把终端里打印出来的 device code / verification URL 交给批准人。

浏览器端会进入一个专门的批准页,用来确认"当前是哪个实例、哪个设备码、由哪个登录身份来批准":

下一步常见动作

bash
# 确认登录状态
hbi auth status --output json

# 主动刷新访问令牌
hbi auth refresh

device login 后,去哪里看个人 Client / PAT 凭据?

首次成功完成 device login 后,系统会为当前用户创建或复用一个个人 Client。你可以在 个人中心 > 个人访问令牌 面板里查看它:

这个面板有几个要点:

  • 展示的是可长期复用的 Client ID / Client Secret
  • 页面不会展示 access token;CLI 会在本地凭据缓存中自行保存与续用
  • 如果你后续想切到 client credentials 模式,或需要给 Agent runtime / CI 配置可续期凭据,可以从这里复制对应的 client credentials
  • 如果怀疑 client_secret 泄露,可以直接在这个面板删除当前 PAT client;删除后旧 client 会失效,后续 device login / PAT token 生成会重新建立一份新的 personal credential
  • 本地人工终端日常使用时,仍然优先推荐 hbi auth login --device-login

方式二:使用 client credentials(direct credentials)登录

这条路径适合服务账号、CI、Agent runtime,或你已经拿到了 client_id / client_secret 的场景。

2.1 非交互:通过环境变量注入

bash
HBI_HOST="<你的-hengshi-sense-实例>" \
HBI_CLIENT_ID="<client_id>" \
HBI_CLIENT_SECRET="<client_secret>" \
hbi auth login

CLI 会把登录态缓存到本地;只要当前环境里仍能拿到有效的 client credentials,后续命令就可以继续自动换取或刷新访问令牌。

2.2 非交互:通过命令行参数直接传值

如果你不想通过环境变量注入 client_id / client_secret,也可以直接用参数传入:

bash
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login --client-id "<client_id>" --client-secret "<client_secret>"

# 短参数等价写法(它们是“取值参数”,不是交互快捷键)
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login -i "<client_id>" -s "<client_secret>"

注意:把 secret 写在命令行可能会被 shell history、进程列表或 CI 日志采集到;自动化环境仍优先用 Secret / 环境变量注入。

2.3 交互式:在当前机器输入并保存到钥匙串

bash
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login --interactive

--interactive 会在当前机器提示输入 client_id / client_secret,并保存到系统钥匙串(或本地凭据存储)。它仍然属于 client credentials(direct credentials) 路径,只是输入方式不同,并不是第三套认证模型;更适合人工使用的本地桌面环境。

方式三:直接注入 access token

如果你已经有现成的访问令牌,也可以直接注入:

bash
HBI_HOST="<你的-hengshi-sense-实例>" HBI_TOKEN="<token>" hbi auth status

对用户心智来说,这里只有一个概念:访问令牌HBI_TOKEN(环境变量)和 --token(全局参数)只是把同一个访问令牌注入给 CLI 的两种方式;它们会覆盖已保存登录态,但不是另一套独立认证体系。

注意:token 注入不会把 token“升级”为可复用登录态,也不会自动 refresh;token 过期后需要再次注入或改回前两种可续期路径。

这条路径适合:

  • 已有外部系统统一分发短期 token
  • 临时自动化任务
  • 不希望在当前环境保存 client credentials 的场景
  • 明确接受 token 过期且不承诺 refresh / durable auth 的场景

常用认证命令

查看当前认证状态

最小可用示例

bash
hbi auth status --output json

典型输出

json
{
  "currentHost": "https://<your-hengshi-sense-instance>",
  "hosts": [
    {
      "apiUrl": "https://<your-hengshi-sense-instance>",
      "authMethod": "unknown",
      "authState": "authenticated",
      "credentialSource": "config-token-cache",
      "current": true,
      "host": "https://<your-hengshi-sense-instance>",
      "identity": "user",
      "refreshable": false,
      "source": "config-token-cache"
    }
  ]
}

下一步常见动作

  • 如果 authStateunauthenticated,先执行 hbi auth login --device-login
  • 如果 refreshabletrue,可以执行 hbi auth refresh 续期

主动刷新访问令牌

最小可用示例

bash
hbi auth refresh

典型输出

Refreshing token.
Token refreshed.
   Expires in: 2529 seconds

退出登录

最小可用示例

bash
hbi auth logout

清除本地 token 缓存和已保存凭据。

其他命令

bash
# 列出系统支持的认证方式
hbi auth methods

# 查看当前激活的认证方式
hbi auth active

对外使用建议

本地人工终端

优先使用:

bash
HBI_HOST="<你的-hengshi-sense-实例>" hbi auth login --device-login

如果你已经在当前机器保存了默认 host,也可以直接运行 hbi auth login --device-login。但对文档示例、脚本和多环境场景,仍优先显式写出 HBI_HOST=...

Agent runtime / CI

优先使用:

bash
HBI_HOST="<你的-hengshi-sense-实例>" \
HBI_CLIENT_ID="<client_id>" \
HBI_CLIENT_SECRET="<client_secret>" \
hbi auth login

如果运行时不希望依赖系统钥匙串,也可以只走环境变量与本地凭据缓存。

已有现成 access token

优先使用:

bash
export HBI_TOKEN="<token>"

如果只是临时覆盖一次,也可以改用全局参数:

bash
hbi --token "<token>" auth status

凭据安全建议

  • 不要把访问令牌、client secret 硬编码到脚本、文档或仓库里
  • 自动化环境优先使用 Secret / 环境变量注入
  • 人工桌面环境优先使用浏览器 device login
  • 不要把完整的 auth status 输出原样贴到公开渠道

如果某些容器或受限环境不适合访问系统钥匙串,可以显式设置:

bash
export HBI_DISABLE_KEYRING=true

如果你在容器、远程开发环境或桌面会话不完整的机器上反复看到系统钥匙串弹窗,通常说明当前环境不适合交互式保存凭据。此时优先改用显式的 HBI_HOST + HBI_CLIENT_ID + HBI_CLIENT_SECRET(或一次性的 HBI_TOKEN)注入,并配合 HBI_DISABLE_KEYRING=true 关闭系统钥匙串集成。

常见连接问题

HBI_HOST 或本机默认 host 未设置

CLI 不知道当前该访问哪个 host,通常会在第一次请求时失败。先检查:

bash
echo "$HBI_HOST"
hbi instance current

如果你不想依赖本机默认值,直接在命令前显式写 HBI_HOST=...

登录成功但没有看到目标资源

优先排查这几类问题:

  1. 当前连到的不是预期 host / 实例
  2. 当前账号没有对应应用、数据连接或空间的访问权限
  3. Agent 执行时继承的环境变量与当前终端不一致

token 过期或认证状态不稳定

建议优先检查:

bash
hbi auth status --output json
hbi auth refresh

如果你使用的是 client credentials,也请确认 HBI_CLIENT_IDHBI_CLIENT_SECRET 仍然有效。

衡石分析平台使用手册