远程 Linux 上安全运行 Claude Code

基于一次真实落地实践整理(DigitalOcean 美国机 + 浏览器远程桌面 + Claude Desktop)。 目标:在自己可控的美区 Linux 上,用浏览器安全地使用 Claude Desktop / Claude Code,并具备中文输入、文件上传、声音与 HTTPS 门户。 文档日期:2026-09-13 · 适用系统:Ubuntu 24.04 LTS


0. 你最终会得到什么#

能力说明
美区 VPSDigitalOcean Droplet,长期可续费
图形桌面TigerVNC + XFCE(Claude Desktop 稳定)/ Plasma(可选)
浏览器入口https://wi.ci 密码门户(Cloudflare Tunnel,无需裸开 3389/5901)
两种远程方式noVNC(VNC 桌面)· Guacamole + 声音(xrdp/RDP)
ClaudeClaude 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#

  1. 注册/登录 DigitalOcean。
  2. Create → Droplets → 选区域、Ubuntu 24.04、2C/4G。
  3. 认证方式优先 SSH Key;若暂时用密码,创建后立刻改为密钥并禁用密码登录。
  4. 主机名示例:claude-code-us
  5. 创建后记录:公网 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_ADDRESSdbus-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:mask sleep.target suspend.target hibernate.target
  • Plasma:~/.config/kscreenlockerrc 关闭 Autolock
  • xset s off -dpms 写入会话启动脚本

4. 安装 Claude Desktop(Linux)#

  1. 按 Anthropic 官方 Linux 安装方式安装 Claude Desktop(apt 包或官方文档当前方式)。
  2. desk 用户在图形桌面启动,完成登录。
  3. 桌面可放快捷方式 start-claude-desktop.sh(强制 DISPLAY=:1)。

注意事项:

  • 4GB 内存很紧:少开 Chrome 标签;不要同时挂很多 Electron 应用。
  • 若在 Plasma 下窗口「启动了但看不见」:切回 XFCE 再开 Claude。
  • KDE Wallet 弹窗可禁用(kwalletrcEnabled=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):

服务端口
门户 Flask8081
nginx(Tunnel 目标)8080
VNC5901
Guacamole Tomcat8085
guacd4822
xrdp3389(仅 localhost)

5.2 文件上传(Inbox)#

  • 服务器目录示例:/home/desk/Desktop/Inbox
  • 门户提供拖拽上传;UI 可做成右侧浮动「文件管理」。

5.3 Cloudflare Tunnel + 域名#

  1. 域名(示例 wi.ci)接入 Cloudflare DNS。
  2. 安装 cloudflared,创建 Tunnel,Ingress:
ingress:
  - hostname: wi.ci

service: http://127.0.0.1:8080

  - service: http_status:404
  1. 门户自身再加一层密码(与 VNC 密码分开更好)。
  2. 验证:https://wi.ci → 登录 → noVNC 出桌面。

6. Guacamole + xrdp(带声音的浏览器远程)#

6.1 为什么还要 Guacamole#

  • noVNC 声音链路较弱或需额外 WebSocket 音频。
  • Guacamole 走 RDP(xrdp),配合 PipeWire/xrdp-sink 可做浏览器内声音。

注意:Guacamole/RDP 是 另一路桌面会话(例如显示 :10),不是同一块 noVNC 屏幕。

6.2 安装要点#

  1. 安装 xrdp / xorgxrdpdesk 用户可登录。
  2. Docker Compose 部署 Guacamole + guacd + PostgreSQL。
  3. nginx 反代 /guacamole/,并配置 WebSocket Upgrade。
  4. UFW 允许 Docker 网桥访问宿主机 guacd:4822(否则会一直 Waiting / Bad gateway):
ufw allow from 172.16.0.0/12 to any port 4822
  1. RDP 音频:编译/安装 pulseaudio-module-xrdp 或 PipeWire 的 xrdp 模块;会话里 PULSE_SINK=xrdp-sink
  2. Guacamole 连接参数示例:127.0.0.1:3389,用户 deskenable-audio=trueserver-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、VNC xstartup~/.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. 安全运行清单(请当作强制项)#

  1. 公网不开放 5901 / 3389 / 8080 / 4822;只开 22(或改端口)+ Cloudflare。
  2. SSH 密钥登录,关闭密码登录;root 禁止密码。
  3. 门户密码 ≠ 随意弱口令;可与 VNC 分离。
  4. Secrets 路径示例(权限 600,仅 root/desk 可读):

    • /root/secrets/desk-portal-password.txt
    • /root/secrets/desk-rdp-password.txt
    • /root/secrets/guacamole-admin.txt
  5. 定期 apt upgrade;关注 Claude Desktop 与内核更新。
  6. 快照:DigitalOcean Snapshot 在大改前拍一张。
  7. 不要把 Cookie、API Key、桌面录像发到公开地方。
  8. 内存告警:free -h;OOM 时优先关浏览器标签 / 重启桌面会话。

10. 日常使用方式#

  1. 打开 https://你的域名 → 输入门户密码。
  2. 选连接方式:

    • noVNC:日常桌面、Claude Desktop(XFCE)
    • Guacamole+声音:需要系统声时
  3. 点桌面区域一下,确保键盘焦点在远端。
  4. 中文:Ctrl+Space
  5. 传文件:门户「文件管理」→ 拖到 Inbox。
  6. 退出:门户「退出登录」;不要依赖「关浏览器标签 = 锁屏安全」。

续费提醒:可为 Droplet 与 Claude 会员分别设日历/助理提醒(例:每月固定日)。


11. 故障排查速查#

现象常见原因处理
门户 502cloudflared / 源站挂了systemctl restart cloudflared nginx desk-portal
Guacamole Waiting / Bad gatewayUFW 拦 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.service
  • desk-websockify.service
  • desk-audio.service(若启用 noVNC 音频)
  • cloudflared.service
  • xrdp / xrdp-sesman

14. 从零到可用的最短路径(清单)#

  1. 买 DO 美区 2C/4G Ubuntu 24.04
  2. SSH 密钥 + UFW + 用户 desk
  3. 装 XFCE + TigerVNC(localhost)
  4. 装 Claude Desktop,桌面登录成功
  5. 门户 + noVNC + 上传
  6. Cloudflare Tunnel 绑定域名 HTTPS

7.(可选)Guacamole + xrdp + 音频 + UFW 放行 Docker→guacd

  1. 关休眠/自动锁屏
  2. 装 Fcitx5 拼音,Ctrl+Space
  3. 拍 Snapshot,写好续费提醒

15. 免责声明#

  • 云厂商 TOS、Claude/Anthropic 服务条款以官方为准;区域与合规自行负责。
  • 本教程描述的是 自有 VPS 上的系统管理与远程桌面,不教绕过任何服务的安全或计费策略。
  • 文档中的域名、IP、路径来自一次实践,迁移时请替换为你的实际值。

附录 A. 本次实践环境快照(可删)#

云主机名claude-code-us
系统Ubuntu 24.04
规格2C / 4GB / NYC
门户域名示例wi.ci
noVNC 桌面XFCE(Claude 稳定)
GuacamolePlasma + xrdp(声音)
输入法Fcitx5 拼音

文档结束。建议下载后与你的私密笔记(密码、Tunnel ID、账单邮箱)分开放。