$cd ../troubleshooting/
⚠ High Impact#gateway#auth
device token mismatch — アップグレード後のゲートウェイ認証失敗
OpenClaw をアップグレード(特に 2026.2.14 以降)すると、設定は正しいのに CLI / Control UI / サブエージェントが device token mismatch で失敗することがあります。典型的な原因は、systemd(または launchd / Windows タスク)に焼き込まれた古い OPENCLAW_GATEWAY_TOKEN が openclaw.json を上書きしていることです。非公式コミュニティ向けの手順です。
Jason Guo · 非公式コミュニティガイド · Ubuntu systemd / Mac Mini 想定 · 公式プロジェクトとは無関係
要点
- 1.症状:openclaw gateway status → device token mismatch。
- 2.原因:サービス定義(または .env)の OPENCLAW_GATEWAY_TOKEN が openclaw.json の gateway.auth.token と不一致。
- 3.応急処置:systemd の古い Environment= を削除 → daemon-reload → gateway 再起動。
- 4.その後 status と Control UI で確認。
symptom.log
🔍 症状
$ openclaw gateway status
[ERROR] device token mismatch — rejecting client
[WARN] Control UI / CLI auth failed after upgrade
ログ例
✓ ログや CLI に device token mismatch
✓ プロセスは動いているが gateway status が認証失敗
✓ アップグレードや doctor --fix 後に Control UI が繋がらない
✓ サブエージェントが切断される
✓ gateway install / トークンローテーション / 旧 Clawdbot 移行の直後に発生
root_cause.md
🧪 根本原因
#A
systemd ユーザーサービスに古い OPENCLAW_GATEWAY_TOKEN
// gateway install が Environment= を unit に書き込み、後のローテーションで openclaw.json だけ更新される。環境変数が優先される。
→ 修正 A
#B
.env と openclaw.json の不一致
// .env の古い値と json の新トークンが衝突。環境変数が設定を上書き。
→ 修正 B
#C
2026.2.14+ で検証が厳格化
// 以前は不一致が黙認されることがあった。新版では明示的に拒否される。
→ 修正 A または B
#D
launchd / Windows タスクに古いトークン
// systemd と同じパターン。
→ 修正 C
fix.sh
✅ 修正
修正 A — systemd の古いトークンを削除(Linux で最多)
# 1) Confirm the stale env is present
$ grep OPENCLAW_GATEWAY_TOKEN ~/.config/systemd/user/openclaw-gateway.service
# 2) Remove the Environment= line (keep a backup)
$ cp ~/.config/systemd/user/openclaw-gateway.service ~/openclaw-gateway.service.bak
$ sed -i '/OPENCLAW_GATEWAY_TOKEN=/d' ~/.config/systemd/user/openclaw-gateway.service
# 3) Reload + restart
$ systemctl --user daemon-reload
$ systemctl --user restart openclaw-gateway
$ openclaw gateway status
修正 B — .env と openclaw.json を同期
# Compare env override vs config token
$ grep OPENCLAW_GATEWAY_TOKEN ~/.openclaw/.env 2>/dev/null
$ grep -n 'auth.token\\|"token"' ~/.openclaw/openclaw.json
# Option 1: delete the env override and rely on openclaw.json
$ sed -i '/OPENCLAW_GATEWAY_TOKEN=/d' ~/.openclaw/.env
# Option 2: set .env to the exact same value as gateway.auth.token
# then restart gateway / container
修正 C — macOS / Windows:ローテーション後にデーモン再インストール
# macOS
$ openclaw service uninstall 2>/dev/null || true
$ openclaw service install
$ openclaw service restart
# Windows: recreate the Scheduled Task / service after token rotation so it no longer exports a stale OPENCLAW_GATEWAY_TOKEN
修正 D — 新しい gateway token を再生成
$ openclaw doctor --generate-gateway-token
# Then apply Fix A/B so no stale Environment= remains
$ systemctl --user restart openclaw-gateway
✔ 確認
$ openclaw gateway status
$ openclaw doctor
# Control UI should connect without device token mismatch
🛡️ 予防チェックリスト
- ✓トークン変更後は gateway install を再実行し、古い Environment= を残さない
- ✓.env と openclaw.json の二重管理を避ける
- ✓トークンを git / 公開 Issue に載せない
- ✓非 loopback では mode: none を使わない
- ✓アップグレード後は doctor と gateway status を必ず確認
❓ FAQ
Q1. device token mismatch とは?
クライアントが提示する認証情報が、ゲートウェイプロセスが実際に使っている秘密と一致しない状態です。多くは systemd の古い OPENCLAW_GATEWAY_TOKEN と、新しい gateway.auth.token の衝突です。
Q2. なぜアップグレード後に出る?
2026.2.14 前後でトークン検証が厳しくなり、以前黙認されていた不一致がエラーとして表面化します。ダウングレードではなく、古い env を直してください。
Q3. systemd から OPENCLAW_GATEWAY_TOKEN を消して大丈夫?
gateway.auth.token(または正しく同期された .env)があれば大丈夫です。焼き込み Environment= を消すと、実行時に現在の秘密を読めます。
Q4. WhatsApp / Telegram の再QRは必要?
通常は不要です。これはメッセージングセッションではなくゲートウェイ制御面の認証です。
Q5. 安全にトークンを再生成するには?
新トークンを生成して永続化し、json/.env を一致させ、サービス定義の古い Environment= を削除してから gateway を再起動します。
Q6. Docker でも起きる?
compose の environment とマウント設定が食い違うと同じ症状になります。単一の真実源を保ち、ローテーション後はコンテナを recreate してください。