适用版本: oho CLI v1.0+
最后更新: 2026-03-02
作者: nanobot 🐈
前置模块: 模块 1: 客户端初始化
oho CLI 支持以下认证方式:
| 方式 | 命令/配置 | 适用场景 |
|---|---|---|
| 环境变量 | OPENCODE_SERVER_PASSWORD |
推荐,脚本自动化 |
| 命令行参数 | --password |
临时覆盖 |
| 交互式输入 | oho auth set |
首次配置 |
方法 1: 环境变量(推荐)
# 添加到 ~/.bashrc 或 ~/.zshrc
export OPENCODE_SERVER_PASSWORD="your_password"
# 立即生效
source ~/.bashrc
# 验证设置
echo $OPENCODE_SERVER_PASSWORD方法 2: 命令行参数
# 临时指定密码(当前命令有效)
oho session list --password "your_password"
# 注意:密码会显示在命令历史中,不建议长期使用方法 3: 交互式设置
# 交互式输入密码
oho auth set
# 带提供商参数
oho auth set openai --credentials "api_key=sk-xxx"预期输出:
✓ 认证凭据已设置
# 测试连接(成功则认证有效)
oho config get
# 列出会话(需要认证)
oho session list
# 查看认证配置
oho auth list 2>/dev/null || echo "无独立 auth list 命令"成功标志:
- ✅ 返回配置 JSON
- ✅ 显示会话列表
- ✅ 无 401 错误
失败标志:
- ❌
401 Unauthorized - ❌
authentication required - ❌
invalid credentials
# 1. 检查环境变量
echo $OPENCODE_SERVER_PASSWORD
# 2. 测试连接
curl -v http://127.0.0.1:4096/global/health
# 3. 使用详细输出
oho session list --json 2>&1 | head -20
# 4. 重新设置认证
oho auth set
# 5. 检查服务器日志
tail -50 /root/.local/share/opencode/log/*.log | grep -i "auth\|401"OpenCode Server 可能对以下操作要求权限:
| 操作 | 权限要求 | 命令 |
|---|---|---|
| 读取会话 | 基础权限 | oho session get |
| 修改会话 | 写入权限 | oho session update |
| 删除会话 | 管理员权限 | oho session delete |
| 执行命令 | 执行权限 | oho message command |
| 文件访问 | 文件系统权限 | oho message add --file |
当服务器请求权限时:
# 查看权限请求
oho session permissions -s <session_id>
# 响应权限请求(允许)
oho session permissions <session_id> <permission_id> --allow
# 响应权限请求(拒绝)
oho session permissions <session_id> <permission_id> --deny权限请求示例:
⚠️ 权限请求:访问 /mnt/d/fe/project/src 目录
会话:ses_xxxxx
操作:读取文件
[y/n] 是否允许?
# 查看当前权限配置
oho config get --json | jq '.permissions'
# 设置默认权限策略
oho config set --permissions "allow:read,deny:write"权限策略:
allow:all- 允许所有操作(不推荐)deny:all- 拒绝所有操作(安全模式)allow:read,deny:write- 只读模式allow:read,allow:write,deny:delete- 读写但禁止删除
| Token 类型 | 用途 | 有效期 |
|---|---|---|
| Session Token | 会话认证 | 会话期间 |
| API Token | API 调用 | 可配置 |
| Refresh Token | 刷新访问 Token | 长期 |
# 查看配置目录
ls -la ~/.config/oho/
# 查看 Token 文件(如果存在)
cat ~/.config/oho/token.json 2>/dev/null || echo "无独立 Token 文件"
# 环境变量中的 Token
env | grep -i token典型存储:
~/.config/oho/config.json- 配置和凭据~/.local/share/oho/tokens/- Token 缓存- 环境变量 - 临时 Token
# 手动刷新(如果支持)
oho auth refresh 2>/dev/null || echo "不支持手动刷新"
# 重新认证(获取新 Token)
oho auth set
# 清除旧 Token
rm -rf ~/.local/share/oho/tokens/
oho auth set过期症状:
⚠️ 401 Unauthorized错误⚠️ Token expired消息⚠️ 会话突然中断
解决方案:
# 1. 重新设置认证
oho auth set
# 2. 验证新 Token
oho session list
# 3. 如果问题持续,检查服务器日志
grep "Token\|expired" /root/.local/share/opencode/log/*.log | tail -10| 错误代码 | 错误信息 | 原因 | 解决方案 |
|---|---|---|---|
| 401 | Unauthorized |
密码错误/未认证 | oho auth set |
| 403 | Forbidden |
权限不足 | 检查权限配置 |
| 419 | Token expired |
Token 过期 | 重新认证 |
| 500 | Internal error |
服务器错误 | 检查服务器状态 |
# 详细错误输出
oho session list --json 2>&1
# 检查服务器健康状态
curl http://127.0.0.1:4096/global/health
# 查看服务器日志
tail -100 /root/.local/share/opencode/log/*.log | grep -E "ERROR|401|403"
# 网络连通性测试
ping -c 3 127.0.0.1#!/bin/bash
# 认证错误恢复脚本
echo "🔍 诊断认证问题..."
# 1. 检查环境变量
if [ -z "$OPENCODE_SERVER_PASSWORD" ]; then
echo "❌ 环境变量未设置"
echo "请运行:export OPENCODE_SERVER_PASSWORD=your_password"
exit 1
fi
# 2. 测试连接
echo "📡 测试服务器连接..."
if ! curl -s http://127.0.0.1:4096/global/health > /dev/null; then
echo "❌ 服务器未响应"
echo "请启动服务器:opencode serve --port 4096"
exit 1
fi
# 3. 验证认证
echo "🔐 验证认证..."
if ! oho session list > /dev/null 2>&1; then
echo "❌ 认证失败"
echo "请重新设置:oho auth set"
exit 1
fi
echo "✅ 认证正常"✅ 推荐做法:
# 使用环境变量
export OPENCODE_SERVER_PASSWORD="strong_password"
# 使用密钥管理工具
echo "your_password" | pass insert opencode/server_password
# 使用 .env 文件(不提交到 Git)
echo "OPENCODE_SERVER_PASSWORD=your_password" >> .env
source .env❌ 避免做法:
# 不要在命令中直接写密码
oho session list --password "123456" # ❌ 会留在历史记录
# 不要提交密码到版本控制
git add .env # ❌ 如果包含密码
# 不要使用弱密码
export OPENCODE_SERVER_PASSWORD="123456" # ❌ 太简单# 只授予必要权限
oho config set --permissions "allow:read"
# 定期审查权限
oho config get --json | jq '.permissions'
# 生产环境使用只读模式
export OPENCODE_PERMISSIONS="read-only"# 启用详细日志
export OPENCODE_LOG_LEVEL="debug"
# 查看认证日志
grep "auth\|login\|401" /root/.local/share/opencode/log/*.log
# 监控异常访问
tail -f /root/.local/share/opencode/log/*.log | grep -E "ERROR|WARN"| 环境 | 认证策略 | 权限级别 |
|---|---|---|
| 开发 | 环境变量 | 完全访问 |
| 测试 | 独立密码 | 读写权限 |
| 生产 | 密钥管理 | 只读/最小权限 |
配置示例:
# 开发环境
export OPENCODE_SERVER_PASSWORD="dev_password"
export OPENCODE_PERMISSIONS="allow:all"
# 生产环境
export OPENCODE_SERVER_PASSWORD=$(vault read -field=password secret/opencode)
export OPENCODE_PERMISSIONS="allow:read,deny:write,deny:delete"在开始使用 oho CLI 前,请确认:
- 已设置
OPENCODE_SERVER_PASSWORD环境变量 - 服务器正在运行 (
curl http://127.0.0.1:4096/global/health) - 能够列出会话 (
oho session list) - 了解权限配置 (
oho config get) - 知道如何处理认证错误
- 模块 1: 客户端初始化 - 认证配置、服务器连接
- 模块 3: 检查 Session - 会话查询和管理
- 模块 6: 发送消息 - 需要认证的消息操作
| 问题 | 快速解决 |
|---|---|
| 401 错误 | oho auth set 重新设置密码 |
| 连接拒绝 | opencode serve --port 4096 启动服务器 |
| 权限不足 | oho config set --permissions "allow:read" |
| Token 过期 | 清除缓存并重新认证 |
文档生成时间:2026-03-02 21:04 CST
最后验证:2026-03-03 23:28 CST
$ oho auth set --help
设置认证凭据
Usage:
oho auth set <provider> [flags]
Flags:
--credentials stringArray 认证凭据 (key=value 格式)
-h, --help help for set
Global Flags:
--host string 服务器主机地址 (default "127.0.0.1")
-j, --json 以 JSON 格式输出
--password string 服务器密码 (覆盖环境变量)
-p, --port int 服务器端口 (default 4096)说明:
auth set需要指定提供商参数(如openai,alibaba-cn)- 使用
--credentials传递 key=value 格式的凭据 - 示例:
oho auth set openai --credentials "api_key=sk-xxx"
$ oho session permissions --help
响应权限请求
Usage:
oho session permissions [id] [permissionID] [flags]
Flags:
-h, --help help for permissions
Global Flags:
--host string 服务器主机地址 (default "127.0.0.1")
-j, --json 以 JSON 格式输出
--password string 服务器密码 (覆盖环境变量)
-p, --port int 服务器端口 (default 4096)
-s, --session string 会话 ID说明:
- 用于响应服务器的权限请求
- 需要会话 ID 和权限 ID 参数
- 实际使用场景:当 AI 请求访问文件或执行命令时
$ export OPENCODE_SERVER_PASSWORD="cs516123456"
$ oho session list
共 48 个会话:
ID: ses_34dbffe0dffe8SfdMTbL53MWFP
标题: babylon3D 水体测试与地图编辑器
模型:
---
...结果: ✅ 认证成功,能够正常访问 API
$ unset OPENCODE_SERVER_PASSWORD
$ oho session list
Error: API 错误 [401]: {"error": "unauthorized", "message": "认证失败"}解决方案:
# 重新设置环境变量
export OPENCODE_SERVER_PASSWORD="your_password"
# 或使用命令行参数
oho session list --password "your_password"# 1. AI 请求权限(服务器日志)
[INFO] Permission requested: read_file /mnt/d/fe/project/src/main.go
# 2. 查看权限请求
$ oho session permissions -s ses_xxxxx
权限请求列表:
- ID: perm_123
类型:read_file
路径:/mnt/d/fe/project/src/main.go
状态:pending
# 3. 允许权限
$ oho session permissions ses_xxxxx perm_123 --allow
✓ 权限已授予
# 4. 拒绝权限
$ oho session permissions ses_xxxxx perm_123 --deny
✓ 权限已拒绝注意: 实际命令参数可能因版本而异,请使用 --help 查看最新用法。