vs code 通过 remote-ssh 扩展实现远程开发,需先确保 ssh 连通、配置正确、防火墙放行端口,并依赖服务器端自动部署 vscode-server;首次连接会下载安装,失败时可手动处理;打开项目必须选远程绝对路径,设置与插件均以远程环境为准,断开后需主动清理残留进程。

用 VS Code 连服务器前,先确认 SSH 能通
VS Code 本身不直接“在服务器中打开”,而是通过 Remote - SSH 扩展,在本地 VS Code 界面里加载远程服务器的文件系统和终端。如果 ssh user@host 命令在终端里都连不上,VS Code 一定失败。
常见错误现象:Permission denied (publickey)、Connection refused、Could not establish connection。
- 确保服务器已开启 SSH 服务(
systemctl is-active ssh或sshd) - 本地生成过密钥对(
ssh-keygen -t ed25519),且公钥已追加到服务器的~/.ssh/authorized_keys - 检查服务器防火墙是否放行 22 端口(或自定义端口)
- VS Code 需要能读取本地
~/.ssh/config—— 如果用了别名,务必格式正确,比如:Host myserver<br> HostName 192.168.1.100<br> User deploy<br> Port 2222
安装 Remote - SSH 扩展后,连接方式只有两种有效路径
不是点一下“Connect to Host”就完事。VS Code 的远程连接本质是:先建立 SSH 会话,再在远程机器上拉起一个 vscode-server 后台进程。这个进程默认装在用户家目录下 ~/.vscode-server,首次连接会自动下载安装。
超级科幻炫酷可视化带音乐时空隧道特效背景动画代码下载。支持自定义音乐文件。温馨提示:该js特效音乐需要在服务器环境下运行或本地使用火狐浏览器打开,否则只有动画,没有音乐。
- 推荐方式:按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Remote-SSH: Connect to Host...,选已有配置或手动输user@host:port - 快捷方式:在资源管理器左下角点击
Open a Remote Window图标 →Connect to Host... - 不要直接双击远程目录或拖拽路径进去 —— VS Code 不支持这种“挂载式”打开
- 如果提示
Failed to download vscode-server,大概率是服务器无法访问 GitHub 或 Azure CDN;可手动下载对应 commit 的 tar.gz 包,传到~/.vscode-server/bin/xxx/并解压
打开项目时,“文件夹”和“工作区”行为完全不同
远程连接成功后,你看到的是一个干净的远程环境 —— 本地已安装的插件默认不生效,远程也看不到本地文件。这时候怎么打开代码?关键在“打开什么”。
- 选
File → Open Folder...(或Ctrl+K Ctrl+O),目标必须是服务器上的绝对路径,例如/home/deploy/myapp;不能输相对路径或~/myapp - 如果打开的是空文件夹,VS Code 不会自动识别为项目 ——
package.json、pyproject.toml这些只是辅助,真正触发语言服务靠的是后续打开具体文件 - 想复用本地工作区配置(如多根工作区
.code-workspace)?不行。该文件里的路径全按本地解析,远程打不开。必须在远程环境中重新建工作区 - 编辑器设置(如
editor.tabSize)以远程用户~/.vscode/settings.json为准,不是本地的
断开连接后,后台进程不会自动清理
vscode-server 进程和临时文件不会随 VS Code 关闭而退出或删除。长期不用又不清理,可能占磁盘、留僵尸进程、甚至干扰下次连接。
- 手动清理:登录服务器,运行
ps aux | grep vscode找残留进程,再kill;删掉~/.vscode-server目录(注意:也会清掉你装过的远程插件) - 更稳妥的做法:在 VS Code 里按
Ctrl+Shift+P,运行Remote-SSH: Kill VS Code Server on Host...,它会安全停服并清理临时数据 - 如果你用的是非标准端口或跳转主机(ProxyJump),每次连接都会新建一个 server 实例 —— 多次尝试失败后,
~/.vscode-server下可能出现多个bin/xxx子目录,得逐个检查
最常被忽略的一点:VS Code 的远程窗口一旦关闭,它不会主动通知服务器停掉服务。你以为断开了,其实 node 进程还在后台跑着,等下次连上来才复用。这既是优化,也是隐患。









