8 步,从买服务器到开工
干活的服务器只认跳板的 IP,本机不留任何痕迹;SSH 和图形界面都从这条链路走。
一键指令:整包发给 Agent
不想分 8 次复制?把下面这段一次发给 Agent(配合上面的网址更佳,Agent 会边读边做)。它执行到需要你人工的环节(付款、OVH 重装、Claude 授权)会主动停下等你。
请打开 https://lioncc.ai/pages/dual-server-dev-guide.html 阅读全文,然后按教程的 8 个步骤帮我搭建双服务器远程开发环境: - 每一步先说明你要做什么,命令行操作直接执行,需要我浏览器操作的(OVH 下单付款、Reinstall 注入公钥、Claude 授权)停下来等我完成; - 我的两台服务器 IP 是:<SG_IP>(新加坡)、<CA_IP>(加拿大),如果我还没买就提醒我买; - 每步完成后做教程里写的验证,把结果告诉我,全部通过再进入下一步; - 中途任何报错先自己排查修复,修复不了再问我。
买好两台服务器(浏览器操作,约 20 分钟)
登录 OVH Manager → Bare Metal Cloud → IP (vps) → Order。第一台选 Singapore (SGP),第二台选 Canada (BHS),都选 VPS-1 档位、月付。付款后等状态变 Active,记下两个公网 IP。
生成密钥并重装系统(发指令,约 30 分钟)
把下面指令发给 Agent(两个 IP 换成你的):
请帮我完成两台新 VPS 的 SSH 密钥准备,要求: 1. 在我本机生成 ed25519 密钥对 ~/.ssh/cc_vps_init(无密码短语); 2. 显示公钥内容,我要粘到 OVH 重装向导里; 3. 整理两台机器的信息清单(IP、用途、后续步骤)成表格。
然后你本人操作:OVH Manager 里分别对两台机器 Reinstall,系统选 Ubuntu 26.04,重装向导的 SSH Key 步骤把 Agent 给的公钥粘进去,等两台都变 Active。
初始化跳板机(发指令,约 15 分钟)
请帮我初始化新加坡跳板机 <SG_IP>,通过 ssh ubuntu@<SG_IP> 执行(用 cc_vps_init 密钥),完成: 1. 系统更新到最新; 2. ufw 防火墙:默认拒绝入站,只放行 22/tcp; 3. SSH 加固:只允许公钥认证,禁止 root 登录、禁止密码登录、禁止 agent 转发; 4. 每日自动安全更新,不自动重启; 5. 完成后逐一验证并汇报。
初始化开发机(发指令,约 20 分钟)
注意这台必须经跳板访问(ssh -J):
请帮我初始化加拿大开发机 <CA_IP>(必须经跳板:ssh -J ubuntu@<SG_IP> ubuntu@<CA_IP>),完成: 1. 系统更新;2G swap(swappiness=10); 2. ufw:默认拒绝入站,仅放行来自 <SG_IP> 的 22/tcp; 3. SSH 加固:仅公钥认证、禁 root 禁密码,AllowUsers 限制 ubuntu 只能来自 <SG_IP>; 4. 安装 Node.js 24 LTS、Git、tmux、Claude Code(npm i -g @anthropic-ai/claude-code); 5. 创建 ~/projects 目录; 6. 完成后经跳板实测 claude --version、node -v 并汇报。
配置本机链式代理 + SSH(发指令,约 10 分钟)
先确认本地链式代理:代理软件开着、127.0.0.1:7891 可用、出海域名走第二层静态 ISP 节点(不要直连 OVH)。不确定就把这句发给 Agent:「检查本地代理是否具备链式出海口,确认 7891 是 SOCKS5 可用端口、出海走第二层节点,不要连接任何服务器」。
再配置 SSH 隔离——这一步是整套方案的核心:本机只认识跳板,干活机器的密钥只存在跳板上。
请帮我配置本机 SSH,规则(重要):
1. 生成新密钥 ~/.ssh/cc_sg_ed25519 专用于跳板,公钥追加到跳板 authorized_keys;
2. ~/.ssh/config 写入:
Host cc-jump
HostName <SG_IP>
User ubuntu
IdentityFile ~/.ssh/cc_sg_ed25519
IdentitiesOnly yes
ForwardAgent no
ProxyCommand /usr/bin/nc -X 5 -x 127.0.0.1:7891 %h %p
(端口 7891 换成我实际 SOCKS 端口)
3. 本机不写任何开发机配置、不保存开发机密钥;
4. 跳板上生成一把新密钥 ~/.ssh/cc_dev_key(不拷贝到我本机),公钥追加到开发机 authorized_keys 并加前缀 from="<SG_IP>";
5. 跳板 ~/.ssh/config 写入 Host cc-dev 段(HostName <CA_IP> / User ubuntu / IdentityFile ~/.ssh/cc_dev_key / IdentitiesOnly yes);
6. 验证:ssh cc-jump 通;ssh cc-jump -- ssh cc-dev 'echo DEV_OK' 通;
7. 最后检查我本机 ~/.ssh/config 里只有 cc-jump。
做完的验证标准:本机终端输入 ssh -t cc-jump ssh cc-dev 能进入开发机。
搭 Paseo 图形界面(发指令,约 20 分钟)
请继续配置(全部经 ssh cc-jump -- ssh cc-dev '...' 执行): 1. 开发机安装 Paseo:sudo npm install -g @getpaseo/cli,报 install-scripts 警告就 npm rebuild -g @getpaseo/cli; 2. 创建 systemd 服务 /etc/systemd/system/paseo-remote.service:User=ubuntu,ExecStart=/usr/bin/paseo daemon run(必须是 daemon run,不能用 daemon start),enable 并启动; 3. 开启 Web UI:paseo daemon config set features.webUi.enabled true,重启服务; 4. 确认 daemon 只监听 127.0.0.1:6767(ss -tln 检查),relay 保持关闭; 5. 验证 curl http://127.0.0.1:6767/api/health 返回 ok。
打通两段访问隧道(发指令,约 15 分钟)
请配置 Paseo 的两段访问隧道: 1. 跳板上:修改 /etc/ssh/sshd_config.d/ 下的 PermitOpen 为单行三目标: PermitOpen <CA_IP>:22 127.0.0.1:17677 127.0.0.1:3000 (必须写在一行,多行只有最后一行生效),sshd -t 后 reload; 2. 跳板上:创建 systemd 服务 cc-tunnel-dev.service: ExecStart=/usr/bin/ssh -N -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -o BatchMode=yes -L 127.0.0.1:17677:127.0.0.1:6767 -L 127.0.0.1:3000:127.0.0.1:3000 cc-dev enable 并启动,确认跳板上 17677/3000 在监听; 3. 我本机:创建 launchd 服务 ~/Library/LaunchAgents/com.jascen.cc-tunnel-jump.plist, 转发 127.0.0.1:17677 → 跳板 127.0.0.1:17677,RunAtLoad + KeepAlive,加载并确认进程存在; 4. 最终验证:curl http://127.0.0.1:17677/ 返回 200 且页面标题是 Paseo。
验收 + Claude 授权(人工,约 15 分钟)
浏览器打开 http://127.0.0.1:17677,能看到 Paseo 界面就是成功。Claude 授权必须你本人做:让 Agent 帮你进开发机交互终端运行 claude,它给你一个授权链接后,把链接复制到本地浏览器打开——注意确认此时浏览器流量走的是你的链式出海口(静态 ISP 节点),Claude 看到的登录 IP 就是出海口而不是你的真实网络。登录完成、终端里出现授权成功提示后,在 Paseo 里发一条真实消息验证。