更新之后,SSH 里熟悉的变量突然不生效
你在本机 shell 里写好了 CLAUDE_*、ANTHROPIC_*、DISABLE_*,再通过 Claude Desktop 的 SSH 会话进远端机器,以前经常能「带着走」。公开变更说明里,较新的 Claude Desktop 调整了 SSH / WSL 会话会继承哪些环境变量:CLAUDE_*、ANTHROPIC_*、DISABLE_* 一类仍可按产品规则继承,多数其它文本型配置不再从登录 shell 自动带入,需要改到应用里的 Environment variables(环境变量)面板。
症状很常见:本地终端里 echo $FOO 有值,一进 Desktop 的远程会话就空了;MCP、自定义脚本路径、代理开关「昨天还好,今天突然丢」。问题通常不在 Claude 账号,而在 配置落点变了——权威清单应写在 Desktop 的 Environment variables,而不是依赖某次 SSH 登录时的偶然继承。
本文给出在新加坡常开 Mac mini 上的固定做法:本机只负责连入,变量与 Claude Code / Desktop 配置落在整机磁盘上。Claude 账号由你自己开通;机器侧提供稳定合规的使用环境。
先分清三层:本机 shell、Desktop 面板、远端机器
| 层 | 放什么 | 不该指望什么 | |----|--------|--------------| | 你笔记本上的 ~/.zshrc | 本机终端便利别名 | Desktop SSH 会话一定会读到全部导出 | | Claude Desktop → Environment variables | 要进远程会话的文本配置 | 把密钥明文塞进聊天窗口 | | 新加坡 Mac mini 上的 Claude Code / 项目配置 | settings.json、hooks、钥匙串条目 | 笔记本合盖后会话还在本机继续 |
经验法则:
- 只要出现在「远程会话里必须有」 → 写进 Desktop 的 Environment variables,或写进 Mac mini 本机的受控配置(钥匙串 / 项目 settings)。
- 只给本机终端用 → 继续放 shell rc,别假设 Desktop 会继承。
- 密钥 → 优先钥匙串或官方登录态,不把长效密钥贴进 Environment variables 的明文列表(能短时令牌就短时令牌)。
在新加坡 Mac mini 上落地:一份权威环境
目标:无论你从哪台笔记本用 UU 远程连接或 SSH 打开 Claude Desktop,看到的环境变量集合一致,且不依赖「今天碰巧 source 了哪份 rc」。
1)确认 Desktop 版本与变更范围
在 Mac mini 上打开 Claude Desktop,核对本机构建版本(变更说明里曾提到对 SSH / WSL 继承规则的调整)。在设置里找到 Environment variables(名称以你当前界面为准)。
在同一台机器上另开终端,只作对照,不把它当成权威源:
# 仅作诊断:看本机登录 shell 有什么
env | grep -E '^(CLAUDE_|ANTHROPIC_|DISABLE_)' | sort
若这里有值、Desktop 远程会话里没有,就按下面步骤把「必须带上的键」迁到 Environment variables,而不是继续加长 ~/.zshrc。
2)把必需键写进 Environment variables
在 Desktop 的 Environment variables 中逐项添加(示例键名,按你真实需要增减;不要照抄敏感值):
# 示例:只列「需要进入远程会话」的键
# CLAUDE_* / ANTHROPIC_* / DISABLE_* 是否仍自动继承,以当前版本文档为准
# 其它文本配置(路径、开关、非密钥参数)一律走 Environment variables
MY_PROJECT_ROOT=/Users/user/work/app
CLAUDE_CODE_EXTRA_FLAGS=
操作要点:
- 先列清单再粘贴:打开一份私有备忘(仅本机可见),写出「远程会话真正读取的键」;迁完删掉明文备忘中的密钥行。
- 路径用 Mac mini 上的绝对路径:Desktop 会话跑在远端文件系统里,写笔记本路径会静默失败。
- 改完重启 Desktop 会话(断开再连 SSH / 重开远程会话),再用会话内命令验收,而不是只看本机终端。
3)在远端会话里做三条验收
进入 Desktop 的 SSH 会话后:
# 1)预期应存在的键
printenv MY_PROJECT_ROOT
# 2)对照:只应出现你显式配置或文档声明会继承的前缀
printenv | grep -E '^(CLAUDE_|ANTHROPIC_|DISABLE_|MY_)' | sort
# 3)Claude Code CLI(若同机使用)是否读到同一工作区
cd "$MY_PROJECT_ROOT" && claude --version
验收标准:
- Environment variables 里声明的键,在远程会话
printenv可见。 - 故意删掉面板里某一项、重连后该项消失——证明权威源是面板,不是 shell rc。
- 笔记本合盖、另开一台电脑用 UU 远程连接进同一台 Mac mini,结果仍一致。
4)与 Claude Code CLI 对齐(同机双入口)
不少人 Desktop 看 diff、CLI 跑脚本。两边不要各维护一份互相打架的导出:
- 项目级规则放仓库
.claude/settings.json与 hooks(跟 git 走)。 - 机器级开关能进钥匙串或 Desktop Environment variables 的,不要再复制进三份 rc。
- 若 CLI 在
tmux长驻,启动脚本只cd到固定目录并启动claude,敏感项仍走官方登录或钥匙串。
这样更新 Desktop 继承规则时,你只改一处面板,而不是全网搜 export。
十分钟排障清单
- 本机 shell 有值、Desktop SSH 无值 → 迁到 Environment variables,不要继续加 rc。
- 面板有值、会话仍无 → 重连远程会话;确认连的是这台新加坡 Mac mini,而不是另一台临时机器。
- 路径类变量指向不存在的目录 → 在 Mac mini 上
ls该路径;用user家目录下的真实项目路径。 - 密钥类需求 → 改为钥匙串 / 官方登录;Environment variables 只留非密钥开关。
- CLI 与 Desktop 行为不一致 → 核对是否只有一边读了项目
settings.json;在仓库根目录启动。
为什么固定在新加坡常开 Mac mini
- 一份 Environment variables 权威源:配置写在常开整机上的 Desktop,而不是每台笔记本一份易漂移的 shell 导出。
- SSH / UU 远程连接只做入口:合盖、换电脑,会话环境仍在新加坡那台机器上。
- 整机独享:项目路径、钥匙串与 Desktop 配置不与其他客户混用;退租抹机时一并清掉。
- 真 macOS 环境:Claude Desktop 与 Claude Code 同机,继承规则变更时你只在一处验收。
Zumac.Ai 提供位于新加坡的实体 Mac mini M6,整机独享,支持 SSH 与 UU 远程连接,FileVault 全盘加密,退租时抹机重装。新客户整机租用 ¥999/月起,季付 ¥2,697.30,半年付 6 送 1 为 ¥5,994,年付 12 送 2 为 ¥11,988;已购买客户续费保持原价。新客户首单自审核开通当天起租,续费及老客户新订单自付款当天起租。建议先租一个月,把「Desktop Environment variables + 远端验收三条」在同一台机器上跑通。实际延迟取决于你本地的网络线路。
小结
- Desktop 更新后,SSH / WSL 对普通文本环境变量的继承变严;不要再假设
~/.zshrc会完整带进远程会话。 - 把远程会话必需的键写进 Environment variables,路径用 Mac mini 绝对路径,改完重连再
printenv验收。 - 密钥走钥匙串或官方登录;项目规则跟 git;机器级开关只维护一份。
- 用新加坡常开整机做权威环境,笔记本只负责 UU 远程连接或 SSH 进入。
