远程 Linux 上安全运行 Claude Code
基于一次真实落地实践整理(DigitalOcean 美国机 + 浏览器远程桌面 + Claude Desktop)。 目标:在自己可控的美区 Linux 上,用浏览器安全地使用 Claude Desktop / Claude Code,并具备中文输入、文件上传、声音与 HTTPS 门户。 文档日期:2026-09-13 · 适用系统:Ubuntu 24.04 LTS
0. 你最终会得到什么#
| 能力 | 说明 |
|---|---|
| 美区 VPS | DigitalOcean Droplet,长期可续费 |
| 图形桌面 | TigerVNC + XFCE(Claude Desktop 稳定)/ Plasma(可选) |
| 浏览器入口 | https://wi.ci 密码门户(Cloudflare Tunnel,无需裸开 3389/5901) |
| 两种远程方式 | noVNC(VNC 桌面)· Guacamole + 声音(xrdp/RDP) |
| Claude | Claude Desktop(Linux)可登录使用;可在桌面里继续用 CLI / 工程 |
| 中文输入 | Fcitx5 拼音,Ctrl+Space 切换 |
| 文件互传 | 门户「文件管理」拖拽上传到桌面 Inbox |
| 安全基线 | 非 root 日常用户、密钥登录、UFW、密钥不进文档 |
1. 为什么要这样做#
- Claude Desktop / 部分能力对网络区域敏感;美国 VPS + 本地浏览器远控,比「本机直连不稳」更可控。
- 不要把 VNC/RDP 端口暴露到公网。用 Cloudflare Tunnel(或 SSH 隧道)把桌面收在 HTTPS 后面。
- 日常用低权限用户
desk,root 只做装包与系统配置。 - 密码、Token 放在服务器本地 secrets 文件或本机密码管理器,永远不要写进教程仓库或聊天记录的可转发副本。
2. 购买与初始化 DigitalOcean#
2.1 选型建议#
- 规格:2 vCPU / 4 GB RAM(Claude Desktop + 浏览器偏吃内存;再小容易卡死)
- 系统:Ubuntu 24.04 LTS x64
- 区域:美国(如 NYC3)
- 预算:约 $24/月 量级(随官方调价变化)
- 计费:可用账户邮箱注册;支付按你的账户方式(卡 / Alipay 等)
2.2 创建 Droplet#
- 注册/登录 DigitalOcean。
- Create → Droplets → 选区域、Ubuntu 24.04、2C/4G。
- 认证方式优先 SSH Key;若暂时用密码,创建后立刻改为密钥并禁用密码登录。
- 主机名示例:
claude-code-us。 - 创建后记录:公网 IP、root 初始密码(若有)——只保存在本机加密位置。
2.3 本机第一次登录#
ssh root@YOUR_DROPLET_IP
建议立刻:
apt update && apt -y upgrade
timedatectl set-timezone Asia/Shanghai # 或保留 UTC,按你习惯
adduser desk
usermod -aG sudo desk
## 为 desk 配置与你一致的登录密码(可与 VNC 密码统一,便于钥匙串解锁)
2.4 SSH 加固(强烈建议)#
在本机生成密钥(若还没有),把公钥写入服务器:
## 本机
ssh-copy-id -i ~/.ssh/id_ed25519.pub desk@YOUR_DROPLET_IP
服务器 /etc/ssh/sshd_config 建议:
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
然后:
systemctl reload ssh
UFW 基线(先放行 SSH,再启用):
ufw allow OpenSSH
ufw enable
## 后面若用 Cloudflare Tunnel,通常不必对公网开放 5901/3389/8080
3. 安装图形桌面与 TigerVNC#
3.1 桌面环境#
实践结论:
- XFCE:轻、稳,Claude Desktop 窗口正常(推荐作为 noVNC 默认)。
- KDE Plasma 5:观感更好,但 Electron(Claude Desktop)在 VNC/Plasma 下曾出现 InputOnly / 看不见窗口;可保留作备选,不要当作 Claude 主力桌面。
安装示例(可同时装,便于切换):
apt install -y xfce4 xfce4-goodies
## 可选:
apt install -y kde-plasma-desktop
3.2 TigerVNC(仅本机回环)#
apt install -y tigervnc-standalone-server tigervnc-common
sudo -u desk vncpasswd # 设置 VNC 密码
~desk/.vnc/xstartup 要点:
unset DBUS_SESSION_BUS_ADDRESS后dbus-launch- 导出输入法环境(见第 8 节)
exec startxfce4(或 Plasma 的startplasma-x11)
启动(示例显示号 :1 → 端口 5901):
sudo -u desk vncserver :1 -geometry 1920x1080 -depth 24
安全:VNC 监听 localhost only,公网只走 Tunnel / SSH 转发。
ssh -L 5901:127.0.0.1:5901 desk@YOUR_DROPLET_IP
## 再用本地 VNC 客户端连 127.0.0.1:5901
3.3 防休眠 / 防锁屏(远程机必备)#
否则浏览器里会突然「锁屏 / 黑屏」:
systemd:masksleep.target suspend.target hibernate.target- Plasma:
~/.config/kscreenlockerrc关闭 Autolock xset s off -dpms写入会话启动脚本
4. 安装 Claude Desktop(Linux)#
- 按 Anthropic 官方 Linux 安装方式安装 Claude Desktop(apt 包或官方文档当前方式)。
- 用
desk用户在图形桌面启动,完成登录。 - 桌面可放快捷方式
start-claude-desktop.sh(强制DISPLAY=:1)。
注意事项:
- 4GB 内存很紧:少开 Chrome 标签;不要同时挂很多 Electron 应用。
- 若在 Plasma 下窗口「启动了但看不见」:切回 XFCE 再开 Claude。
- KDE Wallet 弹窗可禁用(
kwalletrc→Enabled=false);Claude 可能回退到 plaintext 会话存储,属权衡。 - GNOME Keyring / 登录密码与 desk 密码一致时,钥匙串更少打断。
Claude Code CLI(可选,与 Desktop 互补):
## 按官方当前文档安装 Node / claude CLI
## 在桌面终端里用,而不是把 API Key 写进世界可读文件
5. Web 远程桌面门户(noVNC + 上传)#
5.1 组件#
- websockify:把
5901变成 WebSocket - noVNC:浏览器里的 VNC
- Flask 小门户:登录、分辨率、语言、文件上传、模式切换
- nginx:反代本机端口
- cloudflared:Cloudflare Tunnel → 本机 nginx
典型本机端口(仅 127.0.0.1):
| 服务 | 端口 |
|---|---|
| 门户 Flask | 8081 |
| nginx(Tunnel 目标) | 8080 |
| VNC | 5901 |
| Guacamole Tomcat | 8085 |
| guacd | 4822 |
| xrdp | 3389(仅 localhost) |
5.2 文件上传(Inbox)#
- 服务器目录示例:
/home/desk/Desktop/Inbox - 门户提供拖拽上传;UI 可做成右侧浮动「文件管理」。
5.3 Cloudflare Tunnel + 域名#
- 域名(示例
wi.ci)接入 Cloudflare DNS。 - 安装
cloudflared,创建 Tunnel,Ingress:
ingress:
- hostname: wi.ci
service: http://127.0.0.1:8080
- service: http_status:404
- 门户自身再加一层密码(与 VNC 密码分开更好)。
- 验证:
https://wi.ci→ 登录 → noVNC 出桌面。
6. Guacamole + xrdp(带声音的浏览器远程)#
6.1 为什么还要 Guacamole#
- noVNC 声音链路较弱或需额外 WebSocket 音频。
- Guacamole 走 RDP(xrdp),配合 PipeWire/
xrdp-sink可做浏览器内声音。
注意:Guacamole/RDP 是 另一路桌面会话(例如显示 :10),不是同一块 noVNC 屏幕。
6.2 安装要点#
- 安装
xrdp/xorgxrdp,desk用户可登录。 - Docker Compose 部署 Guacamole + guacd + PostgreSQL。
- nginx 反代
/guacamole/,并配置 WebSocket Upgrade。 - UFW 允许 Docker 网桥访问宿主机 guacd:4822(否则会一直 Waiting / Bad gateway):
ufw allow from 172.16.0.0/12 to any port 4822
- RDP 音频:编译/安装
pulseaudio-module-xrdp或 PipeWire 的 xrdp 模块;会话里PULSE_SINK=xrdp-sink。 - Guacamole 连接参数示例:
127.0.0.1:3389,用户desk,enable-audio=true,server-layout=en-us-qwerty。
6.3 门户里的连接方式#
- 下拉框:Guacamole+声音 / noVNC
- Guacamole iframe 需
tabindex+ 点击聚焦,否则浏览器键盘事件会被门户抢走。 - 英文输入正常后,再启用中文输入法(见下节)。
6.4 已移除的方案#
- RustDesk:可卸以免多开端口与维护成本(按你的威胁模型决定)。
- 独立「RDP 客户端」入口可与 Guacamole 合并,减少用户选择负担。
7. 分辨率、语言与门户体验#
- 分辨率下拉:调用
xrandr/ 脚本改 VNC 几何。 - 语言:门户 UI 中英切换(zh/en)。
- 全屏、新标签打开、退出登录。
- Favicon、紧凑顶栏,给桌面更多垂直空间。
8. 中文输入法(Fcitx5 拼音)#
8.1 安装#
apt install -y fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk3 \
fcitx5-frontend-gtk4 fcitx5-frontend-qt5 fonts-noto-cjk fonts-noto-cjk-extra
8.2 配置原则#
- 默认 英文键盘,
ActiveByDefault=False。 - 切换:Ctrl + Space → 拼音;再按回英文。
- 环境变量(写入
~/.xsession、VNCxstartup、~/.profile):
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
- 会话启动时:
fcitx5 -d --replace
8.3 与 Guacamole 的关系#
- 曾出现「输入法进程吞掉所有按键」→ 英文也没反应。
- 修复顺序:先保证 Ctrl+Space 关闭拼音时英文畅通,再教用户切中文。
- 若英文再次失灵:先
Ctrl+Space切回英文,或重连 Guacamole。
9. 安全运行清单(请当作强制项)#
- 公网不开放 5901 / 3389 / 8080 / 4822;只开 22(或改端口)+ Cloudflare。
- SSH 密钥登录,关闭密码登录;root 禁止密码。
- 门户密码 ≠ 随意弱口令;可与 VNC 分离。
Secrets 路径示例(权限
600,仅 root/desk 可读):/root/secrets/desk-portal-password.txt/root/secrets/desk-rdp-password.txt/root/secrets/guacamole-admin.txt
- 定期
apt upgrade;关注 Claude Desktop 与内核更新。 - 快照:DigitalOcean Snapshot 在大改前拍一张。
- 不要把 Cookie、API Key、桌面录像发到公开地方。
- 内存告警:
free -h;OOM 时优先关浏览器标签 / 重启桌面会话。
10. 日常使用方式#
- 打开
https://你的域名→ 输入门户密码。 选连接方式:
- noVNC:日常桌面、Claude Desktop(XFCE)
- Guacamole+声音:需要系统声时
- 点桌面区域一下,确保键盘焦点在远端。
- 中文:
Ctrl+Space。 - 传文件:门户「文件管理」→ 拖到 Inbox。
- 退出:门户「退出登录」;不要依赖「关浏览器标签 = 锁屏安全」。
续费提醒:可为 Droplet 与 Claude 会员分别设日历/助理提醒(例:每月固定日)。
11. 故障排查速查#
| 现象 | 常见原因 | 处理 |
|---|---|---|
| 门户 502 | cloudflared / 源站挂了 | systemctl restart cloudflared nginx desk-portal |
| Guacamole Waiting / Bad gateway | UFW 拦 Docker→4822 | 放行 172.16.0.0/12 → 4822 |
| Guacamole 黑屏 | Plasma 合成器 / 会话挂了 | KWIN_COMPOSE=N;重连;或改用 noVNC |
| 键盘完全没反应 | iframe 没焦点 / 输入法吞键 | 点击桌面;Ctrl+Space;查 fcitx |
| Claude 启动了看不见 | Plasma + Electron | 改用 XFCE;清 Singleton 锁后重启 |
| 突然锁屏 | Plasma 自动锁 / 休眠 | 关 Autolock;mask sleep targets |
| 声音没有 | 未走 xrdp-sink / 未开音频 | Guacamole 模式 + PipeWire xrdp 模块 |
| 很卡 / 被杀进程 | 4G 内存打满 | 少开标签;重启 VNC 会话 |
12. 桌面环境切换(备忘)#
服务器上可保留切换脚本(示例路径):
/home/desk/bin/use-xfce— noVNC 用 XFCE(Claude 推荐)/home/desk/bin/use-plasma— 切回 Plasma(需自测 Claude)
改 ~/.vnc/xstartup 后执行:
sudo -u desk vncserver -kill :1
sudo -u desk vncserver :1 -geometry 1920x1080 -depth 24
xrdp/Guacamole 会话改的是 ~/.xsession,重连 Guacamole 后生效。
13. 推荐目录与服务名(落地参考)#
/opt/desk-portal/app.py # 门户
/opt/guacamole/ # Guacamole 栈
/home/desk/.vnc/ # VNC 配置
/home/desk/.xsession # xrdp 会话
/home/desk/Desktop/Inbox # 上传目录
/root/secrets/ # 密码与令牌(勿提交 Git)
常见 systemd 单元:
desk-portal.servicedesk-websockify.servicedesk-audio.service(若启用 noVNC 音频)cloudflared.servicexrdp/xrdp-sesman
14. 从零到可用的最短路径(清单)#
- 买 DO 美区 2C/4G Ubuntu 24.04
- SSH 密钥 + UFW + 用户
desk - 装 XFCE + TigerVNC(localhost)
- 装 Claude Desktop,桌面登录成功
- 门户 + noVNC + 上传
- Cloudflare Tunnel 绑定域名 HTTPS
7.(可选)Guacamole + xrdp + 音频 + UFW 放行 Docker→guacd
- 关休眠/自动锁屏
- 装 Fcitx5 拼音,Ctrl+Space
- 拍 Snapshot,写好续费提醒
15. 免责声明#
- 云厂商 TOS、Claude/Anthropic 服务条款以官方为准;区域与合规自行负责。
- 本教程描述的是 自有 VPS 上的系统管理与远程桌面,不教绕过任何服务的安全或计费策略。
- 文档中的域名、IP、路径来自一次实践,迁移时请替换为你的实际值。
附录 A. 本次实践环境快照(可删)#
| 项 | 值 |
|---|---|
| 云主机名 | claude-code-us |
| 系统 | Ubuntu 24.04 |
| 规格 | 2C / 4GB / NYC |
| 门户域名示例 | wi.ci |
| noVNC 桌面 | XFCE(Claude 稳定) |
| Guacamole | Plasma + xrdp(声音) |
| 输入法 | Fcitx5 拼音 |
文档结束。建议下载后与你的私密笔记(密码、Tunnel ID、账单邮箱)分开放。