VSCode通过Remote-SSH扩展实现远程开发,需安装扩展、配置SSH主机并确保远程环境完整。首次连接自动部署vscode-server,插件需单独安装到远程,复杂网络场景依赖.ssh/config配置,终端命令排查优先。

VSCode 本身不直接“连接”服务器,而是通过 Remote - SSH 扩展实现远程开发——它把本地 VSCode 的 UI 和编辑能力,无缝对接到远程机器的文件系统、终端和调试环境。只要网络通、SSH 可登录、远程有基础运行时(如 bash、python),就能用。
安装 Remote - SSH 并配置 SSH 连接
先确认本地已装好 OpenSSH 客户端(Windows 10/11 默认启用,macOS/Linux 一般自带)。然后在 VSCode 扩展市场搜 Remote - SSH,安装官方扩展(作者 Microsoft)。
接着配置 SSH 主机:
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Remote-SSH: Connect to Host...,选Configure SSH Hosts... - 选择 SSH 配置文件位置(推荐
~/.ssh/config),追加类似内容:
Host my-server
HostName 192.168.1.100
User john
IdentityFile ~/.ssh/id_rsa保存后,再执行 Remote-SSH: Connect to Host...,就能看到 my-server 出现在列表里。
首次连接时远程会自动部署 VS Code Server
点击主机名后,VSCode 会在远程用户家目录下拉起一个隐藏目录(如 ~/.vscode-server),并下载对应版本的 server 二进制。这个过程依赖远程有可执行权限、磁盘空间足够、且能访问 GitHub 或微软 CDN(国内网络有时卡在这步)。
常见问题:
大家都知道,在进行J2EE项目的开发过程中,在调试阶段如果只是修改了页面是不需要重启应用服务器的,比如不需要重启Tomcat。只需要在浏览器中 进行页面刷新即可。其实之所以不用重启Tomcat等应用服务器,其根本原因是因为我们可以在应用服务器的配置文件中设置虚拟目录,这样就可以知道web 项目所在的目录,于是就可以省去打包、然后再重新发布到服务器的步骤。感兴趣的朋友可以过来看看
-
Failed to download vscode-server:手动下载 tar 包(从 https://update.code.visualstudio.com 找对应 commit hash),传到远程~/.vscode-server/bin/下解压 - 远程无
curl或wget:提前装好(sudo apt install curl等) - 权限被拒绝(
Permission denied (publickey)):检查IdentityFile路径是否正确、私钥是否 chmod 600、远程sshd_config是否允许公钥认证
打开远程文件夹后,所有操作都发生在远程
连接成功后,点击 File → Open Folder...,路径显示的是远程机器上的绝对路径(例如 /home/john/project),不是你本地的。这意味着:
- 你在编辑器里保存的文件,实时写入远程磁盘
- 终端(
Ctrl+`)默认是远程 shell,python --version查的是远程 Python - 调试器、任务(
tasks.json)、launch 配置,全部运行在远程上下文 - 本地装的插件(如 Prettier、ESLint)默认不生效;需在远程窗口中单独安装「Remote」版插件(右下角弹窗会提示,或去扩展面板点「Install on SSH: my-server」)
别忽略 .ssh/config 的 ProxyCommand 和端口转发场景
如果你要连的服务器不能直连(比如在内网、需跳转),.ssh/config 支持复杂路由。例如走跳板机:
Host jump
HostName 203.0.113.5
User admin
Host my-server
HostName 10.0.1.20
User john
ProxyCommand ssh -W %h:%p jump
或者指定非标准端口、启用 AgentForwarding(方便远程再 ssh 到其他机器):
- 端口:加一行
Port 2222 - 代理转发:加
ForwardAgent yes(注意安全风险) - 连接超时长:加
ConnectTimeout 30
这些配置 VSCode 全部复用,无需额外设置。但一旦 ssh my-server 在终端失败,VSCode 也连不上——排查永远从终端命令开始。
真正容易被忽略的,是远程环境的完整性:没有 git 就没法用源码管理视图,没装 node 就跑不起前端调试,甚至 locale 缺失都可能导致中文路径乱码。连上只是第一步,让远程“像本地一样工作”,才是关键。









