type
Post
status
Published
date
Apr 12, 2026
slug
claude-bug
summary
踩坑记:一个官方文档没讲清楚的 root 权限坑
tags
思考
category
技术分享
icon
password
URL
一、故障现象
环境:Windows 10 + Claude Desktop 1.1617.0,服务器是 Ubuntu 24.04。
在桌面端添加 SSH 连接、选好环境、新建会话、授权工作目录——全部都正常。底部状态栏能清楚看到
[email protected]: /root/projectname,SSH 隧道稳稳建立。但是发消息完全没有响应。
输入
hi 按回车,消息气泡显示出来,然后没有然后了。没有 loading 动画、没有 thinking 状态、没有任何报错、没有红条提示,UI 层面一片死寂,就像消息掉进了黑洞。与此同时,桌面端的 Chat 标签页完全正常,跟 Claude 聊天秒回。这说明账号、网络、桌面端本身都没毛病,只有 Code + SSH 这个组合是坏的。
二、官方文档没讲清楚的两件事
带着问题第一反应是去翻官方文档,结果有两处关键信息严重缺失。
第一,文档说"Claude Code must be installed on the remote machine"(Claude Code 必须安装在远程机器上)。这句话严重误导——我老老实实在服务器上用 nvm +
npm install -g @anthropic-ai/claude-code 装了一份,还为了让非交互式 SSH 能找到它调整了 PATH、建了软链接。但实际上桌面端 SSH 连接时会自己下发一套独立的 ccd-cli 二进制到 ~/.claude/remote/ 目录(一个 230MB 的 ELF 可执行文件,版本可能和你系统装的完全不一样)。你手动装的那份 claude 桌面端压根不用。这个"自动下发"机制,文档一个字都没提。第二,文档从头到尾没有一句话警告"不要用 root 用户 SSH 连接"。对习惯在测试服务器上用 root 的人来说,完全没有任何提示说这会出问题。
三、官方文档里找不到任何解决方案
文档的 Troubleshooting 章节只有几条泛泛而谈的建议:"完全退出桌面端重新打开""检查网络""Windows 用户看 Event Viewer"。这些对"消息发出去没有响应"这种静默失败完全没有帮助——Event Viewer 里什么都没有,桌面端日志文件在 MSIX 沙箱路径里本身就难找,找到了也没有有用信息。
最致命的是桌面端把 ccd-cli 的 stderr 完全吞掉了。用户在 UI 上看不到任何错误,在桌面端日志里看不到,在服务器端的
remote-server.log 里只能看到一行 Read 93 bytes from stderr 但不会告诉你那 93 字节具体写了什么。这是教科书级别的"静默失败"。四、我浪费的八个小时
因为文档没讲清楚 + 错误信息被吞,我前后折腾了约 8 小时,依次排查了:nvm PATH 问题、
/usr/local/bin 软链接、服务器网络连通性、curl api.anthropic.com、账号一致性、SSH 密钥认证、sshd debug 日志、给桌面端装 Proxifier 配 SOCKS5 代理、完全清理 ~/.claude 让桌面端重新下发……这些全部不是原因。最后是通过在服务器上用
pstree 观察进程树、读 ~/.claude/remote/remote-server.log、再写一个 bash wrapper 脚本把 ccd-cli 的 stderr 硬截获下来,才终于看到那行被吞掉的真实报错:原因水落石出:桌面端为了"Auto accept edits"便利,默认给 ccd-cli 加了
--allow-dangerously-skip-permissions 参数;而 Claude Code CLI 硬编码禁止 root 用户使用这个参数(合理的安全规则——root 权限 + 跳过所有文件确认 = 让 AI 在你服务器上拥有无限权力)。两者相遇,ccd-cli 启动瞬间自检失败、退出。五、正确的操作流程
如果你打算用 Claude Code 桌面端 SSH 连接 Linux 服务器,请严格按下面的流程走,能帮你跳过所有坑。
第一步:理解两个关键前提
- 你完全不需要在 Linux 服务器上提前安装 Claude Code。不用装 Node、不用
npm install、不用配 PATH。桌面端首次建立 SSH 连接时会自动下发一套完整的 remote 环境到~/.claude/remote/目录。你只需要让服务器能被 SSH 连上就行。
- 绝对不要用 root 用户 SSH 连接。必须用普通用户,否则会触发
-dangerously-skip-permissions的 root 安全限制,表现就是消息发出去永远没有回复。
第二步:服务器上创建普通用户
以 root 身份登录服务器,执行:
第三步:从 Windows 验证 mu 能免密登录
PowerShell 执行:
不问密码直接返回
mu 和 /home/mu,说明密钥配好了。第四步:在 Claude 桌面端配置 SSH 连接
- 完全退出桌面端(任务管理器里确认没有 Claude.exe 残留),重新打开
- 切到 Code 标签
- 点顶部 environment 下拉 → + Add SSH connection
- 填写:
- Host:你的服务器 IP
- User:
mu← 必须是普通用户,不要填 root - Port:
22(或你自定义的 SSH 端口) - Identity File:私钥路径,如
C:\Users\你的用户名\.ssh\id_ed25519
- 保存
第五步:新建会话,耐心等待首次下发
选中
mu@服务器IP 连接,新建会话。这里是很重要的一步,请耐心:- 如果是第一次连接这台服务器,桌面端会自动往服务器上传
~/.claude/remote/目录,包括server守护进程和约 230MB 的ccd-cli/<版本>二进制。这个下发过程可能需要 1–3 分钟(取决于网速),桌面端 UI 可能不会显示明确进度。请耐心等待,不要反复取消重来,也不要以为卡死了
- 下发期间你可以在另一个终端 SSH 进服务器,执行
watch -n 1 'ls -la ~/.claude/remote/'观察目录是否在增长,确认桌面端确实在传文件
- 如果需要授权工作目录,选
/home/mu/projects(不要选/root/下的任何目录,mu 用户没权限)
- 如果要求登录 Claude 账号,走 OAuth 登录一次
下发完成后,发一条
hi 测试,应该立刻收到回复。第六步(可选但强烈推荐):禁用 root SSH 登录
既然已经有了非 root 用户,顺手把 root 的 SSH 登录禁掉,符合生产服务器最佳实践:
做这步之前务必先确认 mu 用户能正常登录并能 sudo,否则有把自己锁在门外的风险。
几个关键注意事项
- 文件权限:之后 Claude 编辑的文件默认都是 mu 用户的权限。如果你的项目原本在
/root/下或归属 root,需要先chown -R mu:mu /path/to/project把所有权交给 mu,否则 Claude 没法写入
- 不要试图绕过安全规则:有人可能想"那我就用 sudo claude 吧"——这同样会被 block,而且破坏了安全模型的意义
- 如果你已经踩过坑:
rm -rf ~/.claude清理残留(桌面端会重新下发),之前建的/usr/local/bin/claude软链接可以删,nvm 里npm uninstall -g @anthropic-ai/claude-code也可以卸载——桌面端根本不用它们
结语
整件事最让人无奈的不是技术问题本身——报错信息其实非常清楚:
--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons,一句话说完,甚至直接指出了解决方向(别用 root)。问题在于三个小坑叠加:官方文档没提醒不能用 root、官方文档没说清楚 Claude Code 会自动下发不用预装、桌面端 UI 完全吞掉了 ccd-cli 的 stderr。让一个五秒钟就能解决的问题,变成了八个小时的排查地狱。
希望这篇文章能让后来者直接跳到第五步,五分钟搞定。如果你也觉得这个静默失败应该被修复,可以去
https://github.com/anthropics/claude-code/issues 提 issue 支持一下。一句话总结:用 Claude Code 桌面端连 Linux 服务器,不要用 root 登录,创建一个普通用户,仅此而已。
- Author:积极的长腿怪
- URL:https://jjdctg.com/claude-bug
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts





