结论先行:安装微软官方 Remote-SSH 扩展,在 ~/.ssh/config 配置好主机别名与私钥路径后,即可在本地 VS Code 中无感编辑远程服务器文件。所有代码保存即自动写入远端磁盘,集成终端直接在远端执行,并通过自动化端口转发将远端 3000 等端口映射至本地 localhost。服务器内存建议 2GB 起步,初次连接会自动拉取约 100MB 的 VS Code Server 核心。该方案彻底替代手写 Vim 与 scp 传输,是 VPS 云端日常开发的第一选择。
1、你能搞定啥
- 在本地 VS Code 中通过 SSH 免密直连远程 VPS
- 像编辑本地文件一样直接打开、修改和保存远程目录,免去 scp 反复上传
- 使用内置集成终端直接执行远程命令,享受完整的快捷键与多光标支持
- 开启自动端口转发,在本地浏览器直接预览远端运行的 Web 服务
- 掌握远程插件管理机制,优化文件排除规则解决大目录卡顿
2、为什么放弃 Vim 和 FTP/SCP?
在 VPS 上修改代码或部署调试,常见的几种开发方式对比:
| 方案 |
优势 |
卡点与缺陷 |
适用场景 |
| SSH + Vim/Nano |
轻量级、无需安装服务 |
快捷键学习成本高、无现代 IDE 补全与可视化调试 |
临时修改单个配置文件 |
| SFTP 插件 |
界面熟悉 |
保存后异步上传,遇到大文件易出现同步冲突与延迟 |
偶尔修改前端静态页 |
| 本地开发 + SCP/Git 推拉 |
本地体验好 |
每改一行代码都要 commit 或上传,反复切换上下文 |
规范化版本发布 |
| Remote SSH |
本地 UI 丝滑体验 + 远端执行 + 自动端口转发 |
初次连接需远端下载 100MB 运行环境 |
日常云端主力开发 |
Remote SSH 工作架构图
3、前期准备:SSH 免密与生产级 Config 调优
在打开 VS Code 之前,先确保本地终端能一条命令免密登录服务器,并开启多路复用加速。
3.1 配置 SSH 密钥登录
1 2 3 4 5
| ssh-keygen -t ed25519 -C "[email protected]"
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 22 用户名@你的服务器IP
|
3.2 高阶 ~/.ssh/config 生产配置(连接复用与防断线)
在本地开发机打开或创建 ~/.ssh/config 文件:
1 2 3
| mkdir -p ~/.ssh/sockets chmod 700 ~/.ssh ~/.ssh/sockets nano ~/.ssh/config
|
添加生产级连接复用与主机配置块:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| # 全局 SSH 性能优化与连接复用 (Multiplexing) Host * ControlMaster auto ControlPath ~/.ssh/sockets/%r@%h-%p ControlPersist 4h ServerAliveInterval 30 ServerAliveCountMax 4 TCPKeepAlive yes
# 出海主力开发 VPS (标准公网 IP 连接) Host my-vps HostName 123.45.67.89 User ubuntu Port 22 IdentityFile ~/.ssh/id_ed25519 ForwardAgent no
# 方案二:通过 Cloudflare Tunnel 隐藏 22 端口的零信任连接 # VPS 防火墙完全关闭 22 端口,仅通过 Cloudflare 边缘通道透传 Host my-vps-secure HostName ssh.yourdomain.com User ubuntu IdentityFile ~/.ssh/id_ed25519 ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h
# 方案三:跨跳板机直达私网节点 (Bastion 架构) Host private-node HostName 10.0.1.50 User debian ProxyJump my-vps IdentityFile ~/.ssh/id_ed25519
|
ControlMaster auto 与 ControlPersist 4h:首次握手后保持主套接字,后续打开终端或传输文件无需重复握手,连接建立速度从 2 秒降至 50 毫秒以内。
ServerAliveInterval 30:每隔 30 秒发送心跳,防止家庭宽带或云厂商 NAT 路由器自动丢弃长连接。
在本地终端运行 ssh my-vps 验证,若无需输入密码即可直接进入远端 Shell,说明配置成功。
4、安装与连接实战
第一步:安装官方扩展
- 打开 VS Code,按快捷键
Ctrl+Shift+X(macOS 为 Cmd+Shift+X)进入扩展商店。
- 搜索
Remote - SSH,认准作者为 Microsoft 的官方插件并点击安装。
- 安装完成后,VS Code 窗口最左下角会出现一个明显的蓝色图标
><。
第二步:一键连接目标服务器
- 按
F1(或 Ctrl+Shift+P / Cmd+Shift+P)调出命令面板。
- 输入并选择
Remote-SSH: Connect to Host...。
- 列表会自动读取
~/.ssh/config,直接点击之前命名的 my-vps。
- VS Code 会打开一个新窗口,右下角提示正在下载并启动远端
VS Code Server。
连接成功后,VS Code 状态栏左下角将显示:
SSH: my-vps
5、日常开发核心工作流
1. 打开远端项目目录
点击左侧文件管理器中的 Open Folder(打开文件夹),输入服务器上的工程绝对路径,例如:
/home/ubuntu/projects/web-api
VS Code 侧边栏立即渲染出远程服务器的完整文件树,点击任何文件即可直接展开编辑。按 Ctrl+S(Cmd+S)保存,修改即刻持久化到远端磁盘。
2. 内置集成终端
按快捷键 Ctrl+` 打开内置终端。该终端并非本地 Shell,而是直接与远程 VPS 建立的 PTY 会话。
你在终端里敲击的 docker compose up -d、pnpm dev 或 git status,均在 VPS 的 Linux 环境中原生运行,不占用本地电脑内存与 CPU。
3. 端口转发(Port Forwarding):本地秒级预览
在远程开发 Web 项目时,后端通常监听在远端的 127.0.0.1:3000 或 8080,外部公网无法直接访问。
VS Code 提供了透明的端口映射通道:
- 当远端服务启动并侦听端口时,VS Code 会在右下角自动弹出提示:
Port 3000 is available。
- 点击底部的 PORTS 选项卡,可查看当前映射列表。
- 打开本地电脑浏览器,直接访问
http://localhost:3000,流量将由 VS Code 通过现有的 SSH 管道安全穿透回服务器。
- 无需在云防火墙开启多余端口,既安全又便捷。
6、服务端安全加固与 Fail2ban 防护
为了保护 VPS 免受公网自动化暴力破解,需在远端服务器上强化 SSH 服务端配置:
1 2 3 4 5 6 7 8
| PermitRootLogin prohibit-password PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 30 ClientAliveCountMax 3 X11Forwarding no
|
重启 SSH 服务:
1
| sudo systemctl restart sshd
|
安装并启用 fail2ban 自动阻断扫描 IP:
1 2 3
| sudo apt-get update && sudo apt-get install -y fail2ban sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local sudo systemctl enable --now fail2ban
|
6.2 远程 Docker 容器内部二次穿透开发(Remote SSH + Docker 扩展联动)
在真实的复杂业务场景中,很多服务是以 Docker 容器形态运行在 VPS 上的。Remote-SSH 支持无缝嵌套联动:
- 先通过 Remote-SSH 连接到远程 VPS 宿主机;
- 在远程 VS Code 的扩展面板中,搜索并安装 Docker 扩展(Microsoft 出品)与 Dev Containers 扩展;
- 打开侧边栏的 Docker 图标,即可看到远端正在运行的所有容器;
- 右键点击目标业务容器(例如
node-backend),选择 Attach Visual Studio Code;
- VS Code 会以当前容器为执行上下文弹出一个独立窗口,终端与调试器直接注入到容器内部,无需手动执行
docker exec -it,享受与宿主机完全相同的可视化编码体验。
6.3 远端开发环境自动化初始化脚本
对于新购入的全新 VPS,手动安装依赖费时费力。以下整理好了一套经过生产验证的基础环境自动化就绪脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #!/usr/bin/env bash
set -euo pipefail
echo "[1/4] 更新系统基础包并安装核心开发工具..." sudo apt-get update && sudo apt-get install -y \ curl wget git jq build-essential zsh tmux rsync htop ca-certificates
echo "[2/4] 安装现代 Node.js 运行环境 (NodeSource LTS)..." if ! command -v node &> /dev/null; then curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs sudo corepack enable fi
echo "[3/4] 安装 Docker 引擎与 Compose 插件..." if ! command -v docker &> /dev/null; then curl -fsSL https://get.docker.com | bash sudo usermod -aG docker "$USER" echo "已将用户 $USER 加入 docker 用户组,重新登录即可免 sudo 执行 docker" fi
echo "[4/4] 调整内核文件监视器限额 (防 VS Code 索引卡死)..." echo "fs.inotify.max_user_watches=524288" | sudo tee /etc/sysctl.d/99-vscode.conf sudo sysctl -p /etc/sysctl.d/99-vscode.conf
echo "✅ 远端开发环境初始化完成!请断开当前 SSH 重新连接以刷新用户组权限。"
|
可以直接通过一条命令从 ittinker-scripts 运行:
1
| curl -fsSL https://raw.githubusercontent.com/ittinker/ittinker-scripts/main/docker-quick-deploy/docker-quick-deploy.sh | bash
|
7、高频疑难排查与性能调优
1. 解决 node_modules 导致 CPU 飙升与 inotify 句柄耗尽
远端工程文件过多时,Linux 默认的 fs.inotify.max_user_watches 会被耗尽,导致 VS Code 报错 Unable to watch for file changes in this large workspace folder。
调优操作:在 VPS 执行以下命令扩大句柄池:
1 2 3
| echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.d/99-vscode-watcher.conf echo "fs.inotify.max_user_instances=512" | sudo tee -a /etc/sysctl.d/99-vscode-watcher.conf sudo sysctl -p /etc/sysctl.d/99-vscode-watcher.conf
|
并在远端项目根目录下创建 .vscode/settings.json,配置忽略规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| { "files.watcherExclude": { "**/.git/objects/**": true, "**/.git/subtree-cache/**": true, "**/node_modules/**": true, "**/dist/**": true, "**/.next/**": true, "**/.turbo/**": true }, "search.exclude": { "**/node_modules": true, "**/dist": true, "**/build": true } }
|
2. 服务器内存不足引发进程被杀(Swap 快速挂载脚本)
VS Code Server 与语言分析插件整体占用约 200MB - 400MB 内存。如果 VPS 仅有 1GB 内存且未开启 Swap,运行大型编译任务时容易触发内核 OOM 导致 SSH 会话断开。
一键创建 2GB 生产级 Swap 交换文件:
1 2 3 4 5 6
| sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
|
也可借助开源运维脚本全面排查整机资源状况:
1
| curl -fsSL https://raw.githubusercontent.com/ittinker/ittinker-scripts/main/vps-health-monitor/vps-health-monitor.sh | bash
|
3. VS Code Server 僵尸进程清理与版本锁死恢复
当网络突发断开或 VS Code 更新后,远端可能遗留无主 Node.js 孤儿进程占用端口与锁文件:
1 2 3
| pkill -f 'vscode-server' rm -rf ~/.vscode-server/bin/*/.lock*
|
8、实操检验 Checklist
配置完成后,按以下清单核验远程开发环境状态:
- [ ] 免密连接:终端运行
ssh my-vps 无需输入密码直接登入
- [ ] 心跳保活:
~/.ssh/config 中已写入 ServerAliveInterval 30,长时间闲置不掉线
- [ ] 连接复用:
ControlMaster auto 生效,秒级打开新集成终端窗口
- [ ] 句柄扩容:
sysctl fs.inotify.max_user_watches 已提升至 524288,大项目无告警
- [ ] 安全加固:SSH 禁用密码登录,仅放行 Ed25519 密钥认证
- [ ] 端口穿透:通过 PORTS 标签页将远端测试端口映射至本地并成功在本地浏览器打开
- [ ] 忽略规则:大项目
.vscode/settings.json 中已配置 watcherExclude 避免资源过度消耗