对于Linux:vscode中远程连接云服务器以及实用插件推荐
开篇介绍:
hello 大家,那么在上篇我写完了vim的配置之后,突然想起来,vscode的使用,似乎我还没解析过,所以就有了这篇博客的诞生,那么接下来,我们就来了解一下vscode中远程连接云服务器以及实用插件推荐。
一、为什么选择 VS Code 远程开发?—— 从痛点到解决方案的深度剖析
1.1 本地开发的 “血泪史”:那些让开发者崩溃的瞬间
我们先聊聊本地开发的痛点 —— 这些场景,你大概率或多或少经历过:
痛点 1:本地资源不足,大型项目 “跑不动”
- 案例 1:一个 C++ 大型项目(代码量 50 万行 +),本地笔记本(i5+8G 内存)编译一次需要 47 分钟,每次改一行代码都要等近一小时才能看到结果,效率极低;
- 案例 2:嵌入式开发中,本地需要安装交叉编译工具链(占用 20G+ 磁盘空间),还经常出现 “本地编译通过,板卡运行失败” 的兼容性问题;
- 案例 3:前端项目打包时,本地电脑 CPU 占满 100%,浏览器卡死,无法同时进行调试。
痛点 2:环境一致性问题,“本地跑通,线上报错”
- 案例 1:前端开发中,本地是 Node.js 16.x,服务器是 Node.js 14.x,用到的某个依赖库在 14.x 中存在 Bug,导致上线后功能失效;
- 案例 2:C++ 开发中,本地用 MSVC 编译器,服务器用 GCC 编译器,部分语法兼容差异导致编译失败;
- 案例 3:团队协作时,A 同学用 Windows,B 同学用 macOS,C 同学用 Linux,同一个项目的编译脚本、路径配置各不相同,调试起来耗时耗力。
痛点 3:设备限制,开发 “不自由”
- 案例 1:下班回家后,发现公司电脑上的代码没写完,但没带电脑,只能用家里的老旧笔记本重新配置环境,折腾两小时才开始工作;
- 案例 2:外出时需要紧急修改服务器上的配置文件,只能用手机 SSH 客户端,打字慢、看不到代码结构,改一行代码花了半小时。
痛点 4:协作效率低,文件传输 “来回折腾”
- 案例 1:和同事共用一台测试服务器,A 同学改完代码后,用 FTP 传给 B 同学,B 同学接收后发现文件传输不全,导致代码报错;
- 案例 2:多人同时修改服务器上的同一个文件,后保存的人会覆盖先保存的人的修改,出现 “代码丢失” 的情况。
1.2 VS Code Remote-SSH:为什么它是远程开发的 “最优解”?
面对这些痛点,市面上有很多解决方案,但都存在各种问题:
- XShell+Vim:轻量但学习成本高,Vim 的操作逻辑和 VS Code 差异大,代码补全、调试功能弱,不适合大型项目;
- TeamViewer / 向日葵:远程桌面方案,占用带宽大,操作延迟高,而且需要服务器开启图形界面,资源占用高;
- Docker + 本地 IDE:需要在本地和服务器都安装 Docker,配置复杂,而且无法利用服务器的原生环境,某些依赖库在 Docker 中安装困难;
- GitHub Codespaces:依赖 GitHub 生态,国内访问速度慢,而且收费较高,不适合长期使用。
而 VS Code Remote-SSH 的出现,完美解决了这些问题 —— 它的核心设计理念是 “本地编辑,远程运行”,把 VS Code 的前端界面留在本地,后端的编译器、调试器、插件都运行在服务器上,带来的优势是全方位的:
优势 1:无缝体验,零学习成本
- 本地 VS Code 怎么用,远程就怎么用 —— 快捷键(
Ctrl+S保存、F5调试)、代码补全、语法高亮、文件管理,完全和本地一致; - 不需要学习新的编辑器操作,新手能快速上手,老用户无需适应期。
优势 2:轻量高效,资源占用极低
- 服务器上只需要运行 SSH 服务和 VS Code Server(一个轻量级的后台进程,占用内存通常在 100MB 以内);
- 不需要在服务器上安装图形界面,也不需要同步大量文件到本地,网络传输的只是 “编辑操作”(比如鼠标点击、键盘输入),带宽占用极低,即使在 4G 网络下也能流畅使用。
优势 3:跨平台通吃,环境一致性拉满
- 本地可以是 Windows、macOS、Linux 任意系统,服务器只要是 Linux 发行版(Ubuntu、CentOS、Debian 等),都能完美支持;
- 所有代码都在服务器上编译、运行,依赖库、系统环境都是统一的,彻底解决 “本地跑通,线上报错” 的问题。
优势 4:生态强大,插件支持完善
- VS Code 拥有超过 3 万个插件,其中 90% 以上都支持远程开发;
- 不管是代码辅助(语法提示、格式化)、版本控制(Git)、API 测试(Thunder Client),还是特定语言的开发工具(C/C++、前端),都能找到对应的插件,而且插件运行在服务器上,不占用本地资源。
优势 5:团队协作高效,无需文件传输
- 多人可以同时连接同一台服务器,编辑不同的文件,不会出现文件覆盖的情况;
- 代码实时保存在服务器上,不需要通过 FTP、微信等工具传输,协作效率大幅提升。
1.3 VS Code Remote-SSH 的典型适用场景
它的适用场景几乎覆盖了所有 “本地搞不定,需要服务器” 的开发需求:
场景 1:大型项目编译与运行(C/C++、Java、Go 等)
- 服务器配置:2 核 4G 以上,硬盘 50G+;
- 核心价值:利用服务器的 CPU 多核优势,编译时间从小时级缩短到分钟级;运行时占用服务器内存,本地电脑不会卡顿。
场景 2:嵌入式交叉编译(C/C++)
- 服务器配置:1 核 2G 起步,安装交叉编译工具链;
- 核心价值:服务器上集中配置交叉编译环境,所有开发者都能使用,避免每个人本地配置工具链的麻烦。
场景 3:Web 前端 / 后端开发
- 服务器配置:1 核 2G 起步,硬盘 40G+;
- 核心价值:直接在部署环境开发,改完代码就能运行测试,不需要本地调试后再部署,减少环境差异带来的问题。
场景 4:学生 / 新手 Linux 学习与实验
- 服务器配置:1 核 1G 即可(按量付费,成本低);
- 核心价值:不需要在本地安装虚拟机或双系统,直接远程操作 Linux 服务器,学习成本低,实验环境干净。
场景 5:多设备同步开发(办公电脑、家用电脑、平板)
- 服务器配置:1 核 2G 起步;
- 核心价值:代码统一存储在服务器上,不管用什么设备,打开 VS Code 就能继续开发,不需要同步文件。
二、准备工作:从买服务器到基础配置
要搭建远程开发环境,首先需要一台 “能被远程访问” 的云服务器 —— 这部分是基础,哪怕一个小细节出错,后面都无法连接,所以我会一步步详细讲解,包括云服务器购买、系统配置、SSH 服务设置、防火墙放行等。
2.1 云服务器选购:新手友好的 “低成本、高性价比” 方案
对于新手来说,不需要买太贵的服务器,优先选择 “按量付费” 的基础配置,试错成本低,后续可以根据需求升级。下面以阿里云为例,详细讲解购买步骤(腾讯云、华为云操作类似):
步骤 1:选择云服务器实例
- 访问 阿里云 ECS 控制台,登录后点击 “创建实例”;
- 实例规格:新手选择 “共享型 s6”(1 核 2G,足够日常开发和小型项目运行);
- 操作系统:优先选 Ubuntu 22.04 LTS 64 位(长期支持版,稳定性高,软件包丰富,文档多);如果习惯 CentOS,选 CentOS 7.9 LTS(注意 CentOS 8 已停止维护);
- 存储:默认 40G 高效云盘(足够存储代码、依赖库和运行环境);
- 网络:选择 “专有网络”(默认即可),带宽选 “按使用流量”(新手每月 10GB 流量足够,超出部分按流量计费,成本低);
- 登录凭证:选择 “自定义密码”,设置服务器 root 用户的密码(记好这个密码,后续登录会用到);
- 购买时长:选择 “按量付费”(按小时计费,不用时可以释放,节省成本);
- 点击 “创建实例”,等待几分钟,服务器就会创建完成。
步骤 2:获取服务器公网 IP
- 实例创建完成后,回到 ECS 控制台,在 “实例列表” 中找到你的服务器,复制 “公网 IP”(比如
123.123.123.123)—— 这是后续连接服务器的唯一标识。
选购避坑指南:
- 不要选 “突发性能型 t6” 作为长期开发服务器:这类实例的 CPU 性能会 “突发”,持续高负载时会被限流,编译大型项目会很慢;
- 不要选冷门操作系统:比如 Fedora、Arch Linux,虽然功能强大,但软件包兼容性和文档支持不如 Ubuntu、CentOS;
- 地域尽量选离自己近的:比如你在广州,选 “华南 - 广州” 地域,网络延迟更低,远程操作更流畅。
2.2 第一步:登录服务器(初识 Linux 命令行)
拿到服务器公网 IP 后,我们需要先登录服务器,进行基础配置。新手可以用云厂商提供的 “远程连接” 功能,不用配置本地 SSH 客户端:
步骤 1:用阿里云自带的远程连接登录
- 回到 ECS 控制台,找到你的服务器,点击 “远程连接”→“Workbench 远程连接”;
- 输入用户名
root和你创建实例时设置的密码,点击 “登录”,就能进入服务器的命令行界面。
步骤 2:熟悉 Linux 命令行基础(新手必看)
- 查看当前用户:
whoami(输出root,说明当前是 root 用户); - 查看服务器信息:
uname -a(输出服务器的内核版本、主机名等信息); - 查看当前目录下的文件:
ls; - 切换目录:
cd /home(切换到/home目录,后续创建新用户会用到); - 新建目录:
mkdir test(在当前目录下新建test文件夹); - 删除目录:
rm -rf test(删除test文件夹,-rf表示强制删除,慎用); - 退出登录:
exit。
2.3 第二步:创建非 root 用户(安全第一,避免误操作)
root 用户是 Linux 系统的最高权限用户,误操作(比如 rm -rf /)会导致系统崩溃,而且被黑客攻击的风险极高。我们需要创建一个普通用户(比如 devuser),并给它授予 sudo 权限(需要时能临时提权)。
操作步骤(以 Ubuntu 22.04 为例):
- 登录服务器(root 用户);
- 创建新用户
devuser:执行创建命令后会出现提示,按要求输入密码(记好这个密码,后续用这个用户登录),再次输入密码确认,其余信息直接按回车跳过,最后输入Y确认。 - 给
devuser授予 sudo 权限:该命令的作用是把devuser加入sudo用户组,Linux 中 sudo 组的用户可以通过sudo命令临时提权。
CentOS 系统的差异操作:
- 创建用户:CentOS 用
useradd命令,功能与 Ubuntu 的adduser类似; - 设置密码:用
passwd命令输入并确认密码; - 授予 sudo 权限:CentOS 的 sudo 权限组是
wheel,需将用户加入该组。
验证新用户权限:
- 切换到
devuser用户,-表示切换用户的同时加载该用户的环境变量; - 尝试执行需要 root 权限的命令,输入
devuser的密码,能正常执行说明 sudo 权限配置成功。
2.4 第三步:检查并配置 SSH 服务(远程连接的核心)
VS Code 远程连接依赖 SSH 服务(Secure Shell,安全外壳协议)—— 它是一种加密的网络传输协议,能让本地计算机安全地连接到远程服务器。Linux 服务器默认已经安装了 SSH 服务,但我们需要检查它的状态,并配置一些关键参数,确保连接安全、稳定。
步骤 1:检查 SSH 服务状态
如果输出 “active (running)”,说明 SSH 服务正在运行;如果是 “inactive (dead)”,则启动服务,并设置开机自启,避免服务器重启后服务关闭。
步骤 2:配置 SSH 服务(优化安全性和稳定性)
SSH 服务的配置文件路径是 /etc/ssh/sshd_config,我们需要修改一些关键配置:
- 用
nano编辑器打开配置文件,nano是 Linux 自带的简单编辑器,操作方法为方向键移动光标,直接输入内容,编辑完成后按Ctrl+O保存,按Ctrl+X退出。 - 修改以下配置项(找到对应的行,去掉注释并修改):
- 端口号:默认是 22,后续可以改成其他端口,提高安全性;
- 监听地址:设为
0.0.0.0,允许从任意 IP 访问,新手默认即可; - root 登录限制:默认禁止 root 用户用密码登录,只能用密钥登录,更安全;
- 密码登录:允许密码登录,新手暂时开启,后续配置密钥后可以关闭;
- 公钥认证:开启公钥认证,这是密钥登录的基础;
- 心跳包设置:每隔 60 秒,服务器向客户端发送一次心跳包,防止连接超时断开;
- 连接断开条件:如果客户端连续 3 次未响应心跳包,服务器断开连接。
- 保存配置并重启 SSH 服务,让配置生效。
常见问题:SSH 服务启动失败
- 原因 1:端口被占用,比如修改后的端口被其他服务占用;
- 解决:查看端口占用情况,杀死占用进程或更换其他端口;
- 原因 2:配置文件语法错误,比如少写了括号、拼写错误;
- 解决:检查配置文件语法,根据提示修改错误。
2.5 第四步:放行 22 端口(关键!连接成功的前提)
SSH 服务默认用 22 端口通信,但服务器的防火墙(本地防火墙 + 云平台安全组)会默认拦截外部对 22 端口的访问 —— 如果不放行,本地根本无法连接到服务器。
第一关:云平台安全组放行(必须做!)
云服务器的安全组是 “网络防火墙”,控制着入站(外部访问服务器)和出站(服务器访问外部)的网络流量。以阿里云为例:
- 登录阿里云 ECS 控制台,找到你的服务器,点击 “安全组”→“配置规则”;
- 点击 “入方向”→“手动添加”,填写以下信息:
- 授权策略:允许;
- 协议类型:SSH(默认对应 TCP 协议,端口 22);
- 端口范围:22/22(只放行 22 端口);
- 授权对象:0.0.0.0/0(允许所有 IP 访问,新手先这么设置,后续可以限制为自己的公网 IP,更安全);
- 优先级:1(数值越小,优先级越高);
- 点击 “确定”,安全组规则生效(通常需要 1-2 分钟)。
第二关:服务器本地防火墙放行
除了云平台安全组,服务器本地还有防火墙(Ubuntu 用 ufw,CentOS 用 firewalld),也需要放行 22 端口:
情况 1:Ubuntu 系统(ufw 防火墙)
- 查看防火墙状态,若状态是 “inactive”,说明防火墙未开启,不需要额外配置;
- 若状态是 “active”,则放行 22 端口并重载规则,让配置生效。
情况 2:CentOS 系统(firewalld 防火墙)
- 若防火墙处于运行状态,放行 22 端口(永久生效)并重载规则;
- 验证端口是否放行,输出
22/tcp说明成功。
端口放行的常见误区:
- 只放行云平台安全组,忘记放行本地防火墙:导致连接超时(本地能 ping 通服务器,但 SSH 连接失败);
- 授权对象设置为特定 IP,但自己的公网 IP 是动态的(每次重启路由器都会变):导致下次连接失败,新手建议先设置为
0.0.0.0/0; - 端口号修改后,忘记在安全组和本地防火墙中同步修改:比如把 SSH 端口改成 2222,但安全组只放行 22 端口,导致连接失败。
三、本地环境搭建:Windows/macOS/Linux 三平台全覆盖
服务器配置完成后,轮到本地环境搭建 —— 核心是安装 VS Code、Remote-SSH 插件,以及 OpenSSH 客户端(本地连接 SSH 服务的工具)。下面分三个平台详细讲解,每个步骤都配有具体操作和问题排查。
3.1 第一步:安装 VS Code(本地编辑的核心工具)
VS Code 是微软开发的免费、开源编辑器,支持跨平台,插件生态丰富,是远程开发的最佳选择。
安装步骤:
- 访问 VS Code 官网,点击 “Download”,根据本地系统选择对应的安装包;
- 安装过程:
- Windows:双击安装包,勾选 “Add VS Code to PATH”(重要!让系统能识别
code命令),其他默认下一步即可; - macOS:打开
.dmg包,把Visual Studio Code拖到Applications文件夹; - Linux(Ubuntu):打开终端,进入下载目录,用包管理器命令安装(文件名根据实际下载的版本修改)。
- Windows:双击安装包,勾选 “Add VS Code to PATH”(重要!让系统能识别
- 验证安装:
- Windows:打开 PowerShell,输入版本查询命令,输出版本号说明安装成功;
- macOS/Linux:打开终端,输入版本查询命令,输出版本号说明安装成功。
VS Code 基础配置(提升开发体验)
安装完成后,做一些基础配置,让编辑更顺手:
- 打开 VS Code,点击左侧 “扩展” 图标(或按
Ctrl+Shift+X),安装中文语言包,安装完成后按Ctrl+Shift+P,输入 “Configure Display Language”,选择 “中文(简体)”,重启 VS Code 生效; - 设置字体:点击 “文件”→“首选项”→“设置”(或按
Ctrl+,),搜索 “Font Family”,输入等宽字体(如 “Consolas, 'Courier New', monospace”),代码显示更整齐; - 设置行号:搜索 “Line Numbers”,选择 “on”(显示行号,方便调试);
- 设置自动保存:搜索 “Auto Save”,选择 “afterDelay”(延迟自动保存,避免频繁保存)。
3.2 第二步:安装 Remote-SSH 插件(远程连接的核心插件)
Remote-SSH 是 VS Code 官方提供的远程开发插件,能让 VS Code 直接通过 SSH 连接到远程服务器,实现远程文件编辑、编译、调试等功能。
安装步骤:
- 打开 VS Code,点击左侧 “扩展” 图标(或按
Ctrl+Shift+X); - 在搜索框中输入 “Remote-SSH”,找到官方插件(ID:
ms-vscode-remote.remote-ssh),点击 “安装”; - 安装完成后,左侧会出现一个 “远程资源管理器” 图标(类似 “><” 的图标),同时右下角会弹出提示 “插件已安装,是否重启 VS Code”,点击 “重启” 生效。
插件安装失败的解决方法:
- 原因 1:网络问题(国内访问 VS Code 插件市场速度慢);
- 解决:设置插件市场镜像,按
Ctrl+Shift+P,输入 “Preferences: Open Settings (JSON)”,在打开的文件中添加镜像配置; - 原因 2:VS Code 版本过低;
- 解决:点击 “帮助”→“检查更新”,更新到最新版本后重新安装。
3.3 第三步:安装 OpenSSH 客户端(本地 SSH 连接工具)
VS Code Remote-SSH 插件依赖本地的 OpenSSH 客户端 —— 它是一个命令行工具,负责和远程服务器的 SSH 服务建立连接。不同系统的安装方法不同,下面详细讲解:
情况 1:Windows 系统(需要手动安装)
Windows 系统默认没有内置 OpenSSH 客户端,有两种安装方法:
方法 1:通过系统可选功能安装(推荐)
- 打开 “设置”→“应用”→“可选功能”→“添加功能”;
- 在搜索框中输入 “OpenSSH 客户端”,找到后点击 “安装”;
- 安装完成后,打开 PowerShell,输入版本查询命令,输出版本信息说明安装成功。
方法 2:通过 Git Bash 安装(适合已安装 Git 的用户)
- 下载并安装 Git,安装时默认勾选 “Git Bash Here”;
- 右键点击桌面,选择 “Git Bash Here”,打开 Git Bash 终端;
- 输入版本查询命令,输出版本信息说明安装成功。
情况 2:macOS 系统(默认已内置)
macOS 系统默认已经安装了 OpenSSH 客户端,验证方法:
- 打开 “终端”(Finder→应用程序→实用工具→终端);
- 输入版本查询命令,输出版本信息说明安装成功;
- 如果提示 “command not found”,用包管理器命令安装(需要先安装 Homebrew)。
情况 3:Linux 系统(默认已内置)
Linux 系统(Ubuntu、CentOS 等)默认已经安装了 OpenSSH 客户端,验证方法:
- 打开终端,输入版本查询命令,输出版本信息说明安装成功;
- 如果提示 “command not found”,用对应系统的包管理器命令安装。
OpenSSH 客户端安装失败的常见问题:
- Windows 系统安装后,PowerShell 中输入
ssh提示 “命令未找到”:- 解决:重启电脑(让系统环境变量生效),如果还是不行,手动添加环境变量:“此电脑”→“属性”→“高级系统设置”→“环境变量”→“系统变量”→“Path”,添加
C:\Windows\System32\OpenSSH(OpenSSH 客户端的安装路径)。
- 解决:重启电脑(让系统环境变量生效),如果还是不行,手动添加环境变量:“此电脑”→“属性”→“高级系统设置”→“环境变量”→“系统变量”→“Path”,添加
3.4 第四步:手动 SSH 登录服务器(排错的关键一步)
在正式用 VS Code 连接前,建议先手动用 OpenSSH 客户端登录服务器 —— 这能验证网络、端口、用户、密码是否正确,避免后面因为这些基础问题卡壳。
操作步骤:
- 打开本地终端:
- Windows:打开 PowerShell 或 Git Bash;
- macOS/Linux:打开终端。
- 输入 SSH 登录命令,指定服务器用户名和公网 IP;
- 首次登录时,会提示是否信任该主机,输入
yes(注意小写,不能缩写为y); - 输入服务器用户的密码,按回车 —— 如果能成功进入服务器的命令行界面,说明手动登录成功!
常见登录失败的情况及解决方法:
-
提示 “Connection timed out”(连接超时):
- 原因:服务器公网 IP 错误、云平台安全组未放行 22 端口、本地网络无法访问服务器(比如公司内网限制);
- 解决:
- 核对服务器公网 IP 是否正确;
- 检查云平台安全组是否放行 22 端口(入方向);
- 用手机热点试试(排除本地网络限制);
- 执行 ping 命令测试网络连通性,如果 ping 不通,说明网络层面有问题,联系云厂商客服。
-
提示 “Permission denied (publickey,password)”(权限被拒绝):
- 原因:用户名错误、密码错误、服务器禁用了密码登录;
- 解决:
- 核对用户名是否正确;
- 核对密码是否正确(注意 Linux 密码输入时不显示,避免输错);
- 检查服务器配置文件中的密码登录开关是否为开启状态。
-
提示 “Too many authentication failures”(认证失败次数过多):
- 原因:之前多次输错密码,被服务器暂时封禁;
- 解决:等待 5-10 分钟后再尝试,或更换本地网络(比如用手机热点,更换公网 IP)。
四、SSH 密钥认证:安全高效的连接基石
用密码登录虽然简单,但存在两个致命问题:安全风险高(密码容易被暴力破解)和效率低(每次登录都要输密码)。SSH 密钥认证是解决这两个问题的最佳方案 —— 它基于非对称加密算法,安全性极高,而且配置后能实现免密登录,大幅提升开发效率。
4.1 SSH 密钥认证的原理:像 “指纹锁” 一样安全
SSH 密钥认证的核心是 “非对称加密算法”—— 它会生成一对密钥:公钥(Public Key) 和私钥(Private Key),两者的关系就像 “锁芯” 和 “指纹”:
- 公钥:可以公开分享,比如存到服务器上,相当于 “锁芯”;
- 私钥:必须妥善保管在本地,不能泄露,相当于 “你的指纹”;
- 登录过程:本地计算机用私钥加密一段数据,发送给服务器;服务器用公钥解密,如果解密成功,说明你是私钥的持有者,直接允许登录,不用输密码。
非对称加密 vs 对称加密(补充知识):
- 对称加密:加密和解密用同一个密钥(比如用密码 “123456” 加密文件,解密也需要 “123456”),缺点是密钥容易泄露;
- 非对称加密:加密和解密用不同的密钥(公钥加密,私钥解密;或私钥加密,公钥解密),安全性更高,是 SSH 密钥认证的基础。
为什么要禁用密码登录?
配置好密钥认证后,一定要禁用密码登录,原因有二:
- 安全:暴力破解工具只能尝试密码登录,禁用后黑客无法通过暴力破解进入服务器;
- 高效:后续用 VS Code 或终端连接服务器,不用再输密码,一键登录;
- 自动化:如果要写脚本自动操作服务器(比如定时备份代码),密钥认证是必备的(脚本无法自动输入密码)。
4.2 第一步:生成密钥对(推荐 Ed25519 算法)
生成密钥对时,推荐使用 Ed25519 算法—— 它是目前最安全、最高效的密钥算法,比传统的 RSA 算法更优:
- 安全性:Ed25519 基于椭圆曲线加密,密钥长度仅 256 位,安全性相当于 RSA 4096 位;
- 速度:生成密钥和加密解密的速度比 RSA 快 2-3 倍;
- 兼容性:支持 OpenSSH 6.5 及以上版本(目前主流的 Linux 发行版都支持)。
生成步骤:
- 打开本地终端(Windows 用 PowerShell/Git Bash,macOS/Linux 用终端);
- 输入密钥生成命令,指定算法和备注(备注可填邮箱或服务器用途,方便区分不同密钥);
- 执行命令后,会出现以下提示:
- 指定密钥文件的保存路径,直接按回车(使用默认路径);
- 设置 “密钥密码”(可选,相当于给私钥再加一层保护,即使私钥泄露,没有这个密码也无法使用);
- 再次输入密钥密码(如果之前设置了)。
生成成功后,密钥文件说明:
- 私钥文件:绝对不能泄露,不要上传到 GitHub、共享给他人;
- 公钥文件:可以公开,后续要上传到服务器;
- 查看密钥文件:根据系统不同,在对应的默认路径下可以找到这两个文件。
兼容旧系统:使用 RSA 算法(如果 Ed25519 不支持)
如果你的服务器 OpenSSH 版本低于 6.5(比如 CentOS 6),不支持 Ed25519 算法,可以用 RSA 算法生成密钥对,指定算法为 RSA 并设置密钥长度为 4096 位(安全性足够),生成的文件为私钥和公钥,后续操作和 Ed25519 一致。
4.3 第二步:把公钥上传到服务器(让服务器认识你的私钥)
生成密钥对后,需要把本地的公钥上传到服务器的指定文件中 —— 这个文件是 SSH 密钥认证的 “白名单”,里面的公钥对应的私钥持有者,都能免密登录服务器。
方法 1:用 ssh-copy-id 工具(最简单,推荐)
ssh-copy-id 是 OpenSSH 自带的工具,能自动把公钥上传到服务器并添加到目标文件中,步骤如下:
- 本地终端输入上传命令,指定公钥文件路径、服务器用户名和公网 IP;
- 输入服务器用户的密码,按回车 —— 工具会自动完成公钥上传和权限配置,提示添加成功说明上传成功。
方法 2:手动上传(如果 ssh-copy-id 用不了)
如果本地系统没有 ssh-copy-id 工具(比如 Windows PowerShell),可以手动上传公钥:
- 本地终端输出公钥内容,复制输出的一整行内容;
- SSH 登录服务器(用密码登录);
- 在服务器上创建
.ssh文件夹(如果没有的话),-p选项表示如果文件夹已存在,不会报错; - 把公钥追加到目标文件中,注意必须用追加模式,不能用覆盖模式,否则会清空文件中已有的公钥。
4.4 第三步:设置正确的权限(密钥认证成功的关键!)
SSH 对 .ssh 文件夹和授权文件的权限要求非常严格 —— 如果权限过于开放(比如其他用户能读写),SSH 会认为不安全,直接拒绝密钥认证。这是很多人密钥上传后仍无法免密登录的核心原因!
权限设置规则:
.ssh文件夹:只能让当前用户读写执行(权限值700);- 授权文件:只能让当前用户读写(权限值
600)。
操作步骤(在服务器上执行):
分别执行命令设置 .ssh 文件夹和授权文件的权限。
权限值说明(补充知识):
Linux 中,文件权限用三位数字表示(比如 700、600),每一位代表不同用户组的权限:
- 第一位:当前用户(所有者)的权限;
- 第二位:当前用户所在组的权限;
- 第三位:其他用户的权限;
- 权限值:
r(读)=4,w(写)=2,x(执行)=1,相加得到权限值; - 示例:
700表示所有者有读、写、执行权限,组用户和其他用户无权限;600表示所有者有读、写权限,组用户和其他用户无权限。
验证权限设置:
分别查看 .ssh 文件夹和授权文件的权限,输出结果中权限字段符合要求即为正确。
4.5 第四步:验证密钥认证(免密登录)
权限设置完成后,验证是否能免密登录:
- 本地终端输入 SSH 登录命令,指定服务器用户名和公网 IP;
- 如果不需要输入密码,直接进入服务器命令行,说明密钥认证配置成功!
- (如果设置了密钥密码)第一次登录会提示输入密钥密码,输入后登录成功 —— 后续可以用
ssh-agent工具记住密码,不用每次都输。
4.6 第五步:配置 ~/.ssh/config(一键登录,多服务器管理)
每次登录都输入完整的 SSH 命令还是有点麻烦 —— 我们可以在本地的配置文件中配置 “主机别名”,以后直接用别名登录,而且能管理多台服务器。
操作步骤:
- 打开本地的配置文件(没有的话新建一个);
- 写入基础配置,包括主机别名、服务器公网 IP、登录用户名、本地私钥路径、SSH 端口号、连接超时时间、是否开启压缩等;
- 保存文件后,本地终端输入别名即可直接免密登录服务器!
多服务器管理(进阶配置):
如果有多个云服务器,可以在配置文件中添加多个主机配置,每个配置对应一台服务器,后续登录时输入对应的别名即可,非常方便。
配置文件高级配置项(实用):
- 跳板机配置:通过跳板机连接服务器(比如公司内网服务器,需要先连跳板机);
- 指定已知主机文件:避免多服务器的主机密钥冲突;
- 关闭主机密钥验证:首次登录不提示 “是否信任主机”(适合自动化脚本);
- 关闭日志输出:登录时不显示多余的日志信息(更简洁)。
4.7 第六步:禁用密码登录(安全加固)
验证密钥认证成功后,禁用密码登录,彻底杜绝暴力破解风险:
- SSH 登录服务器(用密钥登录);
- 打开 SSH 配置文件;
- 找到密码登录配置项,修改为禁用,同时确保公钥认证已开启;
- 保存配置并重启 SSH 服务;
- 验证密码登录已禁用:本地终端指定密码认证方式登录,提示权限被拒绝说明禁用成功。
补充:VS Code 中使用密码登录(临时场景)
虽然我们推荐用 SSH 密钥认证(更安全高效),但如果是临时测试服务器、或密钥配置尚未完成,也可以用纯密码方式通过 VS Code Remote-SSH 登录 —— 下面是完整的操作流程:
一、前提:服务器端开启密码登录(必做)
VS Code 用密码登录的核心前提是服务器的 SSH 服务允许密码认证(部分服务器默认禁用),需先在服务器端配置:
步骤 1:登录服务器开启密码认证
- 通过云厂商控制台的 “远程连接”(或其他方式)登录服务器(root 用户);
- 编辑 SSH 配置文件;
- 找到密码登录配置项(如果被注释,先删掉注释),修改为开启,若看到挑战式认证配置项,也改为开启(部分老版本 SSH 依赖此配置才能弹出密码框);
- 保存并退出编辑器;
- 重启 SSH 服务使配置生效。
步骤 2:验证服务器密码登录可用性
本地打开终端,输入登录命令,指定服务器用户名和公网 IP,如果弹出密码输入提示,输入密码后能成功登录,说明服务器端配置没问题。
二、VS Code 侧纯密码登录操作(两种方式)
方式 1:直接输入服务器地址登录(推荐新手)
- 打开 VS Code,确保已安装
Remote-SSH插件(左侧扩展栏 → 搜索 “Remote-SSH” → 安装官方插件); - 打开命令面板:按
Ctrl+Shift+P(macOS 是Cmd+Shift+P); - 输入并选择 “Remote-SSH: Connect to Host...”;
- 在弹出的输入框中,直接输入服务器地址格式:
用户名@服务器公网IP,按回车; - 首次连接会弹出 “Select the platform of the remote host”,选择服务器系统(Ubuntu 选 “Linux”,CentOS 也选 “Linux”);
- 等待 VS Code 自动安装远程组件(VS Code Server):首次连接需要 1-3 分钟(取决于服务器网络),右下角会显示进度提示,不要中断连接;
- 安装完成后,VS Code 右下角会弹出 “输入密码” 的提示框(部分版本会在终端中提示输入密码),直接输入服务器用户的密码;⚠️ 注意:输入密码时不会显示任何字符(Linux 安全机制),不要误以为没输入,直接完整输入后按回车即可;
- 登录成功验证:VS Code 左下角会显示绿色的远程标识,说明已成功连接到远程服务器。
方式 2:极简 config 配置(方便后续快速登录)
如果不想每次都输入 用户名@IP,可以配置本地 .ssh/config 文件(仅填基础信息,不涉及密钥),步骤如下:
- 打开本地
.ssh/config文件(没有就新建一个文本文件,重命名为config,注意去掉.txt后缀); - 写入极简配置,包括主机别名、服务器公网 IP、登录用户名、SSH 端口号、连接超时时间,不填私钥路径项,即纯密码登录;
- 保存文件后,回到 VS Code:
- 打开命令面板 → 选择 “Remote-SSH: Connect to Host...” → 选择配置的别名;
- 后续步骤和方式 1 一致:选择服务器系统 → 等待 VS Code Server 安装 → 输入密码 → 登录成功。
三、密码登录常见问题与解决
问题 1:VS Code 不弹出密码框,提示 “Permission denied (publickey,password)”
- 原因:服务器密码认证未设为开启,或用户名 / 密码输错;
- 解决:
- 重新检查服务器配置文件,确保密码认证已开启,并重启 SSH 服务;
- 核对用户名(区分大小写);
- 核对密码(Linux 密码严格区分大小写,输入时注意输入法切换)。
问题 2:输入密码后提示 “The process tried to write to a nonexistent pipe”
- 原因:Windows 系统下
.ssh文件夹或config文件权限异常(SSH 要求仅当前用户可访问); - 解决步骤(按优先级尝试):
- 修复
.ssh文件夹权限:- 右键本地
.ssh文件夹 → 属性 → 安全 → 高级; - 点击 “禁用继承” → 选择 “将已继承的权限转换为此对象的显式权限”;
- 删除除当前用户外的所有权限(仅保留自己的 “完全控制” 权限),点击 “确定” 保存;
- 右键本地
- 手动指定 config 文件路径:
- 打开 VS Code 设置(
Ctrl+,)→ 搜索 “Remote.SSH: Config File”; - 在输入框中手动填写
.ssh/config的绝对路径;
- 打开 VS Code 设置(
- 重启 VS Code,重新发起连接。
- 修复
问题 3:每次重启 VS Code 都要重新输入密码
- 原因:密码登录本身不支持会话持久化(密钥登录可通过
ssh-agent免密); - 解决:临时使用可接受,长期开发建议切换到 SSH 密钥认证(免密且更安全)。
问题 4:连接时提示 “Host key verification failed”
- 原因:本地已知主机文件中已存在该服务器的旧密钥(比如服务器重装过系统);
- 解决:
- 打开本地
.ssh/known_hosts文件; - 找到包含服务器公网 IP 的行,删除该行;
- 重新发起连接,按提示输入
yes信任服务器,再输入密码即可。
- 打开本地
四、注意事项
- 密码登录仅适合临时测试、应急修改等场景,长期开发建议切换到 SSH 密钥认证(避免密码泄露、暴力破解风险);
- 如果服务器在公网暴露,建议定期更换密码,并限制登录 IP(在云平台安全组中设置授权对象为自己的公网 IP);
- 输入密码时如果连续 3 次输错,服务器可能会暂时封禁你的 IP,等待 5-10 分钟后再尝试。
五、VS Code 连接实战:从点击到写代码
终于到了最核心的环节 —— 用 VS Code 连接远程服务器,开始远程开发!
5.1 第一步:启动远程连接(三种方式)
VS Code 提供了三种启动远程连接的方式,任选一种即可:
方式 1:通过命令面板(最常用)
- 打开 VS Code,按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),打开 “命令面板”; - 输入 “Remote-SSH: Connect to Host...”,按回车;
- 在弹出的下拉列表中,选择我们在配置文件中配置的主机别名,或直接输入
用户名@IP(密码登录方式); - 如果是第一次连接,会弹出 “Select the platform of the remote host”,选择服务器的操作系统(比如 Ubuntu 选 “Linux”)。
方式 2:通过远程资源管理器
- 点击左侧 “远程资源管理器” 图标(类似 “><” 的图标);
- 在 “远程” 标签页中,找到 “SSH Targets”,会显示你配置的所有主机别名;
- 点击主机别名右侧的 “连接” 图标(类似 “→” 的图标),选择服务器操作系统。
方式 3:通过终端直接连接
- 打开 VS Code 的终端(“终端”→“新建终端”);
- 输入别名(密钥登录)或完整登录命令(密码登录),按回车;
- 密码登录需输入密码,密钥登录直接免密;
- 连接成功后,终端会显示服务器的命令行,同时 VS Code 会自动切换到远程模式。
5.2 首次连接:VS Code Server 安装(自动完成)
第一次连接服务器时,VS Code 会自动在服务器上安装 “VS Code Server”—— 这是一个轻量级的后台进程,负责和本地 VS Code 通信,处理代码补全、编译、调试等核心功能。
安装过程说明:
- 你会在 VS Code 右下角看到进度提示:“Installing VS Code Server on remote host...”;
- 安装过程需要 1-3 分钟(取决于服务器网络速度),不要中断连接;
- 安装完成后,VS Code 会自动刷新界面,左下角会出现绿色的远程标识 —— 说明已经成功连接到远程服务器!
VS Code Server 安装失败的解决方法:
- 原因 1:服务器网络速度慢,无法下载 VS Code Server 安装包;
- 解决:手动下载安装包并上传到服务器(参考 VS Code 官方文档);
- 原因 2:服务器磁盘空间不足(VS Code Server 需要至少 100MB 空闲空间);
- 解决:查看磁盘空间,删除不必要的文件释放空间;
- 原因 3:服务器用户权限不足(无法在指定目录下写入文件);
- 解决:检查目录权限,确保当前用户有读写权限;
- 原因 4:密码登录时安装失败,提示 “权限不足”;
- 解决:登录服务器后,手动创建目录并开放权限,再重新发起连接。
5.3 连接成功后的界面变化(本地 vs 远程)
连接远程服务器后,VS Code 的界面会有几个关键变化,需要特别注意:
变化 1:左下角的远程标识
- 本地模式:左下角无特殊标识;
- 远程模式:左下角显示绿色的远程标识,点击可以看到 “关闭远程连接”“切换远程主机” 等选项。
变化 2:远程资源管理器(文件管理)
- 点击左侧 “远程资源管理器” 图标,切换到 “文件” 标签页,可以看到服务器上的文件系统;
- 点击 “打开文件夹”,选择服务器上的目录,就能在 VS Code 中浏览、编辑该目录下的文件;
- 注意:这里的文件都是服务器上的文件,不是本地文件 —— 编辑、保存操作都会直接作用于服务器,不需要手动同步。
变化 3:远程终端(命令执行)
- 点击 “终端”→“新建终端”,打开的是服务器的命令行;
- 执行的所有命令都在服务器上运行,和本地终端无关;
- 终端支持的功能:分屏、新建终端、切换终端,和本地终端一致。
变化 4:远程扩展市场(插件安装)
- 点击左侧 “扩展” 图标,会看到扩展市场顶部显示远程服务器标识 —— 这是远程扩展市场,安装的插件会运行在服务器上;
- 本地扩展市场的插件(比如中文语言包、主题插件)只作用于本地界面,不会影响远程开发;
- 远程开发需要的插件(比如 C/C++ 编译器、前端开发插件)必须在远程扩展市场安装。
变化 5:状态栏的编码与行号
- 右下角的编码(比如
UTF-8)、行号(比如Ln 1, Col 1)仍然有效,但作用于远程文件; - 如果远程文件的编码不是 UTF-8(比如 GBK),可以点击编码标识,选择 “通过编码重新打开”,选择对应的编码。
5.4 远程文件操作实战(编辑、保存、上传、下载)
远程开发的核心是 “本地编辑,远程保存”—— 下面通过几个实操,让你熟悉远程文件的操作:
实操 1:创建并编辑远程文件
- 点击远程资源管理器中的 “新建文件”,命名文件;
- 输入内容;
- 按
Ctrl+S保存 —— 文件会直接保存到服务器的当前目录下; - 打开远程终端,执行查看命令,能看到刚才输入的内容,说明保存成功。
实操 2:上传本地文件到远程服务器
如果需要把本地文件上传到服务器,可以用以下方法:
- 方法 1:通过 VS Code 拖放(推荐);
- 本地文件夹中找到要上传的文件;
- 直接拖放到 VS Code 远程资源管理器的目标目录,文件会自动上传;
- 方法 2:通过
scp命令(终端);- 本地终端输入上传命令,指定本地文件路径和服务器目标路径;
- 密码登录需输入密码,密钥登录直接免密。
实操 3:下载远程文件到本地
如果需要把服务器上的文件下载到本地,可以用以下方法:
- 方法 1:通过 VS Code 右键下载;
- 在远程资源管理器中,右键点击要下载的文件;
- 选择 “下载”,文件会下载到本地的 “下载” 文件夹(Windows)或对应目录(macOS/Linux);
- 方法 2:通过
scp命令(终端);- 本地终端输入下载命令,指定服务器文件路径和本地目标路径;
- 密码登录需输入密码,密钥登录直接免密。
实操 4:删除远程文件 / 文件夹
- 在远程资源管理器中,右键点击要删除的文件 / 文件夹;
- 选择 “删除”,会弹出确认提示,点击 “删除” 即可 —— 操作不可逆,谨慎使用!
- 终端命令删除:执行对应的删除命令(删除文件夹需加强制参数)。
5.5 断开远程连接(正确姿势)
不需要远程开发时,建议正确断开连接,避免占用服务器资源:
- 方法 1:点击左下角的绿色远程标识,选择 “关闭远程连接”;
- 方法 2:按
Ctrl+Shift+P,输入 “Remote-SSH: Close Remote Connection”; - 断开后,VS Code 会回到本地模式,左下角的远程标识消失。
注意事项:
- 断开连接后,服务器上正在运行的程序会继续运行(除非终端被关闭);
- 如果需要让程序在断开连接后继续运行,可以用
tmux或nohup命令(后续进阶部分会讲解)。
六、远程开发实操:C/C++ 与前端开发实战
远程开发的最终目的是 “写代码、编译、运行、调试”—— 下面以 C/C++ 和前端开发为例,详细讲解远程开发的完整流程,包括环境配置、代码编写、编译运行、调试配置。
6.1 示例 1:C/C++ 开发(编译 + 运行 + 调试)
C/C++ 开发需要服务器上安装对应的编译器(GCC/G++)—— 下面从环境配置到调试,一步步实操:
步骤 1:服务器安装编译器
- 远程终端输入更新软件包列表命令,然后安装 GCC/G++;
- 验证安装:输入版本查询命令,输出版本信息说明安装成功。
步骤 2:编写 C/C++ 代码
- 在远程资源管理器中,新建对应的代码文件;
- 输入代码(比如计算类、函数逻辑等功能)。
步骤 3:编译并运行代码
- 远程终端输入编译命令,指定输出文件名,若需要调试则添加调试信息参数;
- 编译成功后,会在当前目录下生成可执行文件;
- 若有语法错误,终端会提示错误位置,修改后重新编译;
- 运行可执行文件,查看输出结果,说明代码在服务器上成功运行!
步骤 4:调试 C/C++ 代码(VS Code 调试功能)
VS Code 远程调试和本地调试操作一致,需要配置调试文件:
- 打开代码文件,点击左侧 “运行和调试” 图标(或按
Ctrl+Shift+D); - 点击 “创建 launch.json 文件”,选择对应的编译器选项;
- VS Code 会自动生成调试配置文件,关键配置项包括可执行文件路径、工作目录、调试器路径等;
- 在代码行号左侧点击,设置断点(会出现红色圆点);
- 按
F5启动调试,程序会在断点处停止; - 调试面板与快捷键详解:
- 左侧 “运行和调试” 面板:
- “变量”:查看当前作用域的变量值;
- “监视”:手动添加变量或表达式,实时查看结果;
- “调用堆栈”:查看函数调用链;
- “断点”:管理所有断点(启用 / 禁用、条件断点等);
- 核心快捷键:
- 单步跳过(不进入函数内部):
F10; - 单步进入(进入函数内部):
F11; - 单步跳出(从函数内部返回):
Shift+F11; - 继续运行(到下一个断点):
F5; - 暂停程序:
Ctrl+Alt+Break; - 结束调试:
Shift+F5;
- 单步跳过(不进入函数内部):
- 左侧 “运行和调试” 面板:
- 调试完成后,按
Shift+F5停止调试,可在终端查看程序最终输出。
6.2 示例 2:前端开发(HTML/CSS/JS/Node.js)
前端开发需要服务器上安装 Node.js(用于打包、运行后端服务)—— 下面从环境配置到运行部署,一步步实操:
步骤 1:服务器安装 Node.js 和 npm
- 远程终端输入命令安装 Node.js(可通过包管理器或官网脚本安装);
- 验证安装:输入版本查询命令,输出版本信息说明安装成功。
步骤 2:创建前端项目
- 远程终端输入命令创建项目目录,进入目录;
- 初始化项目:执行 npm 初始化命令,生成 package.json 文件;
- 安装依赖:根据项目需求安装对应的依赖(如 Express、Vue、React 等)。
步骤 3:编写前端代码
- 新建 HTML、CSS、JS 或框架相关文件;
- 编写页面结构、样式和逻辑(比如简单的响应式页面、接口请求逻辑等)。
步骤 4:运行与调试前端项目
- 本地调试:在 VS Code 中打开 HTML 文件,右键选择 “在默认浏览器中打开”(本地预览页面样式);
- 远程运行:若为 Node.js 后端项目,执行启动命令,服务器运行服务;
- 访问项目:本地浏览器输入
http://服务器公网IP:端口号,即可访问远程运行的前端项目; - 调试 Node.js 项目:
- 打开 VS Code 调试面板,创建调试配置文件;
- 设置断点,按
F5启动调试,通过浏览器访问触发断点,查看变量和调用栈。
步骤 5:项目打包与部署
- 执行打包命令,生成静态文件(如 dist 目录);
- 安装静态文件服务器(如 nginx),配置 nginx 指向打包后的目录;
- 启动 nginx 服务,通过服务器公网 IP 即可访问部署后的前端项目。
七、重磅:20 个远程开发必备实用插件
VS Code 的插件生态是远程开发效率的核心 —— 但必须明确:远程环境中,仅 “远程扩展市场” 安装的插件生效(本地插件仅作用于 VS Code 界面,不影响远程代码)。以下是筛选的 20 个 “刚需插件”,覆盖远程管理、C/C++ 开发、前端开发、版本控制、效率工具等场景,每个插件都附详细作用、是否远程安装、配置技巧和使用场景:
7.1 远程管理核心插件(2 个)
插件 1:Remote-SSH(ID:ms-vscode-remote.remote-ssh)
- 核心作用:VS Code 远程开发的基石,实现 SSH 连接、远程文件同步、VS Code Server 管理;
- 是否需要远程安装:否(本地插件,仅负责连接逻辑);
- 必学配置:
- 打开设置(
Ctrl+,)→ 搜索 “Remote.SSH: Config File”:手动指定配置文件路径(解决 Windows 下路径识别问题); - 搜索 “Remote.SSH: Connect Timeout”:设置连接超时时间(默认 15 秒,网络差可改为 30 秒);
- 打开设置(
- 使用技巧:
- 快速切换主机:按
Ctrl+Shift+P→ 输入 “Remote-SSH: Switch Host”,直接切换已配置的服务器; - 查看连接日志:按
Ctrl+Shift+P→ 输入 “Remote-SSH: Show Log”,排查连接失败问题;
- 快速切换主机:按
- 适用场景:所有远程开发场景(必备)。
插件 2:Remote Explorer(ID:ms-vscode.remote-explorer)
- 核心作用:可视化管理多台远程服务器,支持文件夹快速访问、连接状态显示;
- 是否需要远程安装:否(本地插件);
- 配置技巧:
- 右键服务器别名→“Add Folder to Workspace”:将远程文件夹添加到工作区,下次连接自动打开;
- 勾选 “Show Hidden Files”:显示远程服务器的隐藏文件(如
.ssh、.gitignore);
- 快捷键:
- 刷新服务器列表:
F5(远程资源管理器面板); - 快速连接:
Ctrl+Shift+P→ “Remote Explorer: Connect to Host”;
- 刷新服务器列表:
- 适用场景:管理 2 台以上服务器时,避免频繁输入命令,直观查看连接状态。
7.2 C/C++ 开发增强插件(5 个)
插件 3:C/C++(ID:ms-vscode.cpptools)
- 核心作用:C/C++ 远程开发必备,提供语法高亮、智能补全、调试支持、代码格式化;
- 是否需要远程安装:是;
- 深度配置:
- 打开远程文件夹后,按
Ctrl+Shift+P→ 输入 “C/C++: Edit Configurations (JSON)”,生成配置文件; - 配置编译器路径和包含目录(系统头文件目录、自定义库头文件目录);
- 打开远程文件夹后,按
- 使用技巧:
- 快速格式化代码:
Shift+Alt+F(需配合格式化工具,远程安装对应工具); - 跳转到定义:
F12(按住Ctrl点击函数 / 变量名也可);
- 快速格式化代码:
- 适用场景:C/C++ 远程开发、交叉编译、调试。
插件 4:C/C++ Extension Pack(ID:ms-vscode.cpptools-extension-pack)
- 核心作用:C/C++ 开发插件合集,包含 C/C++、C/C++ Themes、CMake Tools 等必备插件,一次性安装,无需单独配置;
- 是否需要远程安装:是;
- 配置技巧:安装后自动关联 C/C++ 项目,无需额外配置,默认支持 GCC、Clang 编译器;
- 使用技巧:配合 CMake Tools 可快速构建 CMake 项目,自动生成编译配置;
- 适用场景:C/C++ 大型项目开发,尤其是 CMake 管理的项目。
插件 5:Clang-Format(ID:xaver.clang-format)
- 核心作用:C/C++ 代码格式化工具,支持自定义代码风格(如 Google、LLVM 风格),保持代码一致性;
- 是否需要远程安装:是;
- 配置技巧:
- 打开设置 → 搜索 “Clang-format: Style” → 选择预设风格(如 “Google”);
- 自定义风格:在项目根目录创建
.clang-format文件,配置缩进、括号换行等规则;
- 快捷键:
Shift+Alt+F(与 VS Code 格式化快捷键一致); - 适用场景:C/C++ 团队协作项目,需要统一代码风格。
插件 6:CMake(ID:twxs.cmake)
- 核心作用:CMake 语法高亮、智能补全、代码片段,支持 CMakeLists.txt 文件快速编写;
- 是否需要远程安装:是;
- 配置技巧:
- 搜索 “CMake: Default Kits” → 选择远程服务器的编译器(如 GCC);
- 启用代码片段:搜索 “CMake: Enable Snippets” → 勾选,支持
cmake_minimum_required、add_executable等片段快速输入;
- 使用技巧:输入
cm可触发代码片段,快速生成 CMake 基础配置; - 适用场景:CMake 管理的 C/C++ 项目。
插件 7:CMake Tools(ID:ms-vscode.cmake-tools)
- 核心作用:CMake 项目构建与调试工具,支持一键配置、编译、调试,自动识别 CMakeLists.txt;
- 是否需要远程安装:是;
- 配置技巧:
- 点击状态栏的 “CMake: [No Kit Selected]” → 选择远程编译器;
- 配置构建目录:搜索 “CMake: Build Directory” → 设置编译输出目录(如
build);
- 使用技巧:
- 一键配置:按
Ctrl+Shift+P→ “CMake: Configure”; - 一键编译:按
Ctrl+Shift+P→ “CMake: Build”; - 调试项目:直接按
F5,自动关联调试配置;
- 一键配置:按
- 适用场景:大型 CMake 项目,简化配置和编译流程。
7.3 前端开发必备插件(5 个)
插件 8:HTML CSS Support(ID:ecmel.vscode-html-css)
- 核心作用:HTML/CSS 语法补全、标签提示、样式预览,支持自定义 CSS 变量;
- 是否需要远程安装:是;
- 配置技巧:
- 搜索 “HTML CSS Support: Custom Data” → 导入自定义标签或样式定义文件;
- 启用自动完成:搜索 “HTML CSS Support: Auto Complete” → 勾选;
- 使用技巧:
- 输入 HTML 标签时自动补全闭合标签;
- 鼠标悬停在 CSS 属性上,显示兼容性和说明;
- 适用场景:HTML/CSS 开发,尤其是静态页面制作。
插件 9:JavaScript and TypeScript Nightly(ID:ms-vscode.vscode-typescript-next)
- 核心作用:JavaScript/TypeScript 语法高亮、智能补全、类型检查、重构支持,更新频率高于官方插件;
- 是否需要远程安装:是;
- 配置技巧:
- 搜索 “TypeScript: Enable Prompt Use Of Newer TypeScript Version” → 勾选,优先使用最新版本;
- 启用严格模式:搜索 “TypeScript: Strict” → 勾选,增强类型检查;
- 使用技巧:
- 快速重构:右键函数 / 变量 → “重构” → 支持重命名、提取函数、接口提取等;
- 类型提示:自动推断变量类型,减少类型定义代码;
- 适用场景:JavaScript/TypeScript 开发,前端框架(Vue、React、Angular)项目。
插件 10:Vetur(ID:octref.vetur)
- 核心作用:Vue 项目开发必备,支持 Vue 2/3 语法高亮、智能补全、模板编译、调试支持;
- 是否需要远程安装:是;
- 配置技巧:
- 搜索 “Vetur: Validation Template” → 勾选,启用模板语法校验;
- 配置格式化工具:搜索 “Vetur: Formatter Template” → 选择 “prettier”;
- 使用技巧:
- 模板中输入
v-触发指令补全(如v-if、v-for); - 组件自动导入:输入组件名自动补全导入语句;
- 模板中输入
- 适用场景:Vue.js 项目开发(前端 / 后端渲染均可)。
插件 11:ESLint(ID:dbaeumer.vscode-eslint)
- 核心作用:JavaScript/TypeScript 代码检查工具,实时检测语法错误、代码规范问题,支持自动修复;
- 是否需要远程安装:是;
- 配置技巧:
- 项目根目录创建
.eslintrc文件,配置检查规则(如 Airbnb、Standard 规范); - 启用自动修复:搜索 “ESLint: Auto Fix On Save” → 勾选,保存文件时自动修复可修复的问题;
- 项目根目录创建
- 使用技巧:
- 右键代码 → “ESLint: Fix all auto-fixable Problems”,手动修复所有可修复问题;
- 错误提示悬停:鼠标悬停在错误代码上,显示问题说明和修复建议;
- 适用场景:前端团队协作项目,需要统一代码规范。
插件 12:Prettier(ID:esbenp.prettier-vscode)
- 核心作用:代码格式化工具,支持 HTML、CSS、JavaScript、TypeScript、Vue 等多种语言,自动统一代码风格;
- 是否需要远程安装:是;
- 配置技巧:
- 项目根目录创建
.prettierrc文件,配置缩进、换行符、引号类型等; - 设置默认格式化工具:搜索 “Editor: Default Formatter” → 选择 “Prettier - Code formatter”;
- 项目根目录创建
- 快捷键:
Shift+Alt+F(一键格式化); - 使用技巧:
- 配合 ESLint 使用:关闭 ESLint 中与 Prettier 冲突的规则,避免重复格式化;
- 格式化选中代码:选中代码块 → 右键 → “Format Selection”;
- 适用场景:所有前端项目,需要统一代码格式。
7.4 版本控制与协作插件(3 个)
插件 13:GitLens(ID:eamodio.gitlens)
- 核心作用:增强 Git 功能,显示代码提交历史、作者、修改时间,支持快速对比版本差异;
- 是否需要远程安装:是;
- 核心功能:
- 行级提交信息:鼠标悬停在代码行上,显示 “最后修改者、提交时间、提交信息”;
- 提交历史面板:左侧 “GitLens” 面板,查看分支、标签、提交记录,支持筛选;
- 版本对比:右键代码行 → “GitLens: Compare Line History”,查看该行使所有修改记录;
- 配置技巧:
- 关闭不必要的提示:设置中搜索 “GitLens: Status Bar” → 取消勾选(避免状态栏拥挤);
- 调整提交信息显示格式:搜索 “GitLens: Commit Format” → 自定义显示字段(如仅显示作者和提交时间);
- 适用场景:多人协作的远程项目,需要追踪代码修改记录。
插件 14:Git Graph(ID:mhutchie.git-graph)
- 核心作用:可视化 Git 提交历史图谱,支持分支对比、提交记录筛选、交互式合并分支;
- 是否需要远程安装:是;
- 使用技巧:
- 打开 Git Graph 面板:按
Ctrl+Shift+P→ “Git Graph: Show Git Graph”; - 对比分支:选中两个分支 → 右键 → “Compare Branches”,直观查看代码差异;
- 交互式合并:选中分支 → 右键 → “Merge Branch”,图形化选择合并策略;
- 打开 Git Graph 面板:按
- 适用场景:复杂分支管理的项目,需要清晰查看提交历史和分支关系。
插件 15:Gitignore(ID:codezombiech.gitignore)
- 核心作用:快速生成
.gitignore文件,支持多种语言和框架(如 C/C++、Vue、Node.js),避免提交不必要的文件; - 是否需要远程安装:是;
- 使用技巧:
- 按
Ctrl+Shift+P→ “Add gitignore” → 选择项目类型(如 “Node”“C++”),自动生成.gitignore文件; - 自定义忽略规则:直接编辑生成的
.gitignore文件,添加项目特有的忽略路径;
- 按
- ** 适用场景
插件 15:Gitignore(ID:codezombiech.gitignore)
- 核心作用:快速生成
.gitignore文件,支持多种语言和框架(如 C/C++、Vue、Node.js),避免提交不必要的文件(如编译产物、依赖文件夹、日志文件); - 是否需要远程安装:是;
- 使用技巧:
- 按
Ctrl+Shift+P→ “Add gitignore” → 选择项目类型(如 “Node”“C++”“Vue”),自动生成符合该类型的.gitignore文件; - 自定义忽略规则:直接编辑生成的
.gitignore文件,添加项目特有的忽略路径(如build/、*.log、*.o等); - 导入现有模板:按
Ctrl+Shift+P→ “Gitignore: Open Gitignore Templates”,选择社区维护的模板(如 GitHub 官方模板);
- 按
- 适用场景:所有 Git 管理的远程项目,尤其是团队协作时,需要统一忽略文件规则,避免冗余文件提交到仓库。
7.5 效率工具与辅助插件(5 个)
插件 16:Code Runner(ID:formulahendry.code-runner)
- 核心作用:一键运行多种语言代码(C/C++、Java、JS、Shell 等),无需手动输入编译 / 运行命令,支持自定义执行脚本;
- 是否需要远程安装:是;
- 关键配置(适配远程环境):
- 打开设置 → 搜索 “Code Runner: Executor Map” → 编辑配置,修改远程环境的运行命令:
json
"code-runner.executorMap": { "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "cpp": "cd $dir && g++ -g $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt", "javascript": "cd $dir && node $fileName", "shellscript": "bash $fileName", "html": "open $fileName" // 本地预览HTML,远程可改为部署后访问 } - 勾选 “Code Runner: Run In Terminal”(在 VS Code 远程终端中运行,支持交互输入,如读取键盘输入的程序);
- 勾选 “Code Runner: Save File Before Run”(运行前自动保存文件,避免未保存代码导致运行结果异常);
- 打开设置 → 搜索 “Code Runner: Executor Map” → 编辑配置,修改远程环境的运行命令:
- 快捷键:
- 运行代码:
Ctrl+Alt+N; - 停止运行:
Ctrl+Alt+M;
- 运行代码:
- 适用场景:快速测试单文件代码、调试代码片段、验证语法正确性(如算法题、小工具脚本)。
插件 17:Error Lens(ID:usernamehw.errorlens)
- 核心作用:将代码中的错误、警告、提示直接显示在代码行右侧,无需切换到 “问题” 面板,实时发现语法错误、代码规范问题;
- 是否需要远程安装:是;
- 配置技巧:
- 调整提示样式:设置中搜索 “Error Lens: Message Style” → 选择 “inline”(行内显示,不占用额外空间)或 “float”(悬浮显示,hover 时展开详情);
- 过滤提示级别:搜索 “Error Lens: Filter” → 仅勾选 “error” 和 “warning”(忽略 “info” 提示,减少视觉干扰);
- 自定义颜色:搜索 “Error Lens: Error Color” → 调整错误提示颜色(默认红色,可改为橙色更柔和);搜索 “Error Lens: Warning Color” → 调整警告颜色(默认黄色);
- 调整提示位置:搜索 “Error Lens: Position” → 选择 “right”(右侧显示)或 “below”(下方显示);
- 使用技巧:
- 点击提示文字可直接跳转到问题详情(如 ESLint 规则说明、编译器错误原因);
- 临时禁用提示:右键提示文字 → “Error Lens: Disable for Line”(仅禁用当前行)或 “Disable for File”(禁用当前文件);
- 适用场景:C/C++、前端开发等需要严格语法检查的场景,尤其是新手或团队协作时,减少因语法错误导致的编译失败。
插件 18:TODO Highlight(ID:wayou.vscode-todo-highlight)
- 核心作用:高亮代码中的
TODO、FIXME、NOTE、BUG等注释标签,快速定位待办事项、bug 修复点、优化建议; - 是否需要远程安装:是;
- 个性化配置:
- 新增自定义标签:打开设置 → 搜索 “TODO Highlight: Keywords” → 编辑配置,添加自定义标签(如
OPT(优化)、HACK(临时解决方案)、TEST(待测试)),并设置对应的颜色:json
"todohighlight.keywords": [ { "text": "TODO", "color": "#ffffff", "backgroundColor": "#ff9800", "borderRadius": "3px" }, { "text": "FIXME", "color": "#ffffff", "backgroundColor": "#f44336" }, { "text": "OPT", "color": "#ffffff", "backgroundColor": "#2196f3" } ] - 显示行号旁图标:搜索 “TODO Highlight: Show Icon In Gutter” → 勾选,在行号旁显示对应标签图标,快速扫描文件中的待办;
- 快速搜索所有标签:按
Ctrl+Shift+P→ “TODO Highlight: List all TODOs”,打开面板显示所有标签位置,点击可直接跳转;
- 新增自定义标签:打开设置 → 搜索 “TODO Highlight: Keywords” → 编辑配置,添加自定义标签(如
- 使用技巧:
- 给标签添加优先级:
TODO[HIGH]: 修复登录接口权限校验(配合自定义标签颜色区分优先级); - 关联任务管理工具:
TODO: #123 优化数据库查询性能(#123 关联 GitHub/GitLab Issues);
- 给标签添加优先级:
- 适用场景:远程开发中需要标记待办事项、bug 修复、代码优化的项目,尤其是多人协作时,便于同步开发进度和任务分配。
插件 19:Thunder Client(ID:rangav.vscode-thunder-client)
- 核心作用:轻量级 API 测试工具,替代 Postman,支持 HTTP/HTTPS 请求、响应格式化、环境变量管理、请求收藏,无需切换外部工具;
- 是否需要远程安装:是;
- 核心功能与配置:
- 新建请求:点击左侧 “Thunder Client” → “New Request”,输入 URL、请求方法(GET/POST/PUT/DELETE)、请求头(如
Content-Type: application/json)、请求体(支持 JSON、Form 表单、Raw 文本); - 环境变量管理:点击 “Environments” → “Add Environment”,创建 “开发环境”“测试环境”“生产环境”,存储不同环境的
baseURL、token、cookie等,切换环境后自动替换请求中的变量(如{{baseURL}}/api/login); - 响应格式化:自动格式化 JSON、XML 响应,支持语法高亮、折叠 / 展开、搜索关键字;
- 请求收藏:编辑完成的请求可保存到文件夹(如 “用户接口”“订单接口”),下次直接复用,支持批量导出 / 导入;
- 新建请求:点击左侧 “Thunder Client” → “New Request”,输入 URL、请求方法(GET/POST/PUT/DELETE)、请求头(如
- 使用技巧:
- 导入 Postman 集合:点击 “Import” → 选择 Postman 导出的 JSON/CSV 文件,快速迁移现有请求;
- 生成代码片段:点击请求编辑页的 “Code” 按钮,生成 C/C++(libcurl)、JavaScript(axios)、Shell(curl)等语言的请求代码,直接复制到项目中;
- 断言测试:在 “Tests” 标签页编写断言(如检查响应状态码为 200、响应体包含指定字段),运行后自动验证接口是否符合预期;
- 适用场景:Web 后端开发、前端接口调试(如 Vue/React 项目调用后端 API),尤其是远程开发时,无需切换外部工具,直接在 VS Code 中完成接口测试。
插件 20:Remote - Containers(ID:ms-vscode-remote.remote-containers)
- 核心作用:将远程开发环境隔离到 Docker 容器中,避免不同项目的依赖冲突(如 C/C++ 不同版本的编译器、前端不同版本的 Node.js),实现 “一次配置,多人复用”;
- 是否需要远程安装:是(服务器需提前安装 Docker);
- 核心配置与使用:
- 服务器安装 Docker:远程终端执行命令安装 Docker,启动并设置开机自启,将当前用户加入
docker组(避免每次使用sudo); - 初始化容器配置:在远程项目根目录,按
Ctrl+Shift+P→ “Remote - Containers: Add Development Container Configuration Files” → 选择项目类型(如 “C++”“Node.js”“Vue”),自动生成.devcontainer文件夹(包含devcontainer.json和Dockerfile); - 自定义容器配置:编辑
devcontainer.json,指定基础镜像(如mcr.microsoft.com/vscode/devcontainers/cpp:0-ubuntu-22.04)、安装依赖(如gcc-11、cmake)、映射端口(如本地 8080 映射容器 80); - 重新打开容器:按
Ctrl+Shift+P→ “Remote - Containers: Reopen in Container”,VS Code 会自动构建 Docker 镜像、启动容器,并连接到容器中开发;
- 服务器安装 Docker:远程终端执行命令安装 Docker,启动并设置开机自启,将当前用户加入
- 优势:
- 环境隔离:不同项目使用独立容器,依赖版本互不影响;
- 团队协作:将
.devcontainer提交到 Git 仓库,同事拉取代码后可直接在相同容器环境中开发,避免 “本地跑通,远程报错”; - 一键重置:容器环境损坏时,可直接删除容器重新构建,快速恢复开发环境;
- 适用场景:多项目开发、团队协作、依赖复杂的项目(如 C++ 交叉编译、前端多版本 Node.js 项目)。
7.6 插件安装注意事项(补充)
- 区分本地与远程插件:安装插件时,务必注意扩展市场顶部是否显示 “SSH: 服务器名” 或 “Dev Container: 容器名”—— 显示则为远程 / 容器内安装,否则为本地安装(仅作用于 VS Code 界面,不影响远程代码运行);
- 避免冗余插件:远程环境中仅安装当前项目必需的插件(如 C++ 项目无需安装前端插件),减少服务器 / 容器资源占用(尤其是内存和磁盘空间);
- 插件更新策略:远程插件更新需在远程扩展市场操作(点击插件旁的 “更新” 按钮),更新后建议重启 VS Code 确保生效;定期清理未使用的远程插件(右键插件 → “卸载”);
- 插件冲突排查:若远程开发出现卡顿、功能异常(如调试失败、格式化失效),可按以下步骤排查:
- 禁用所有非核心插件(如 TODO Highlight、Thunder Client),重启 VS Code 测试;
- 逐一启用插件,定位导致冲突的插件;
- 查看插件日志:按
Ctrl+Shift+P→ “Developer: Toggle Developer Tools” → “Console”,查看插件报错信息;
- 离线安装插件:若服务器无外网,可本地下载插件的
.vsix文件(VS Code 插件市场搜索插件 → 点击 “Download Extension”),通过scp上传到服务器,然后在 VS Code 远程扩展市场中点击 “安装来自 VSIX...”,选择上传的文件完成安装。
八、常见问题与排查指南
远程开发中遇到问题很正常,以下是覆盖实战中 90% 高频问题的 “问题库”,每个问题都提供 “表现描述 + 原因深度分析 + 分步解决步骤”,确保新手也能独立排查:
8.1 问题 1:Permission denied (publickey)(密钥登录失败)
表现:VS Code 或终端连接时提示 “Permission denied (publickey)”,无法免密登录,密钥配置后仍需输入密码。原因分析:
- 本地
~/.ssh/config中IdentityFile路径配置错误(如 Windows 下路径用\未转义、路径拼写错误); - 服务器
~/.ssh/authorized_keys文件权限过高(如其他用户有读写权限,SSH 认为不安全); - 服务器
sshd_config中PubkeyAuthentication被禁用(配置为no); - 本地私钥文件权限过高(Windows 下默认权限开放,SSH 拒绝使用);
- 公钥未正确追加到
authorized_keys(如手动上传时少复制字符、格式错误)。分步解决:
- 验证本地私钥路径:
- 打开
~/.ssh/config,确认IdentityFile路径正确(Windows 示例:C:/Users/张三/.ssh/id_ed25519,需用/或\\;macOS/Linux 示例:~/.ssh/id_ed25519); - 本地终端执行
ls -l 私钥路径(Windows 用 Git Bash),确认文件存在且可读取。
- 打开
- 修复服务器权限(远程终端执行):
# 查看 .ssh 文件夹权限(需为 drwx------) ls -ld ~/.ssh # 查看 authorized_keys 权限(需为 -rw-------) ls -l ~/.ssh/authorized_keys # 若权限不正确,重新设置 chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 检查 SSH 公钥认证配置:
# 查看 sshd_config 中 PubkeyAuthentication 配置 sudo grep "PubkeyAuthentication" /etc/ssh/sshd_config- 若输出
PubkeyAuthentication no或被注释,编辑配置文件:
改为sudo nano /etc/ssh/sshd_configPubkeyAuthentication yes,保存后重启 SSH 服务:sudo systemctl restart sshd。
- 若输出
- Windows 下修复私钥权限:
- 右键私钥文件(如
id_ed25519)→ 属性 → 安全 → 高级; - 点击 “禁用继承” → 选择 “将已继承的权限转换为此对象的显式权限”;
- 删除除当前用户(如 “张三”)外的所有用户 / 组(包括 “Administrators”“Everyone”);
- 给当前用户分配 “完全控制” 权限,点击 “确定” 保存。
- 右键私钥文件(如
- 验证公钥格式:
- 服务器终端执行
cat ~/.ssh/authorized_keys,确认公钥完整(以ssh-ed25519或ssh-rsa开头,以备注结尾,无换行、无多余字符); - 若格式错误,重新上传公钥(用
ssh-copy-id工具更可靠)。
- 服务器终端执行
8.2 问题 2:The process tried to write to a nonexistent pipe(管道不存在错误),也是云服务器重置系统后再次使用remote登录失败的解决方案
表现:VS Code 密码登录时提示以下错误,无法建立连接:
Bad owner or permissions on C:\\Users\\XXX/.ssh/config
The process tried to write to a nonexistent pipe.
原因分析:
- Windows 下
.ssh文件夹或config文件权限异常(SSH 要求仅当前用户可访问,不允许其他用户读写); - VS Code 未正确识别
config文件路径(如路径包含中文、空格); - 本地 OpenSSH 客户端版本过低(低于 8.1p1)或安装损坏;
config文件存在语法错误(如缩进错误、关键字拼写错误)。分步解决(按优先级排序):
- 修复
.ssh文件夹及文件权限(核心步骤):- 打开
C:\Users\你的用户名\.ssh文件夹(如C:\Users\张三\.ssh); - 右键
.ssh文件夹 → 属性 → 安全 → 高级 → 禁用继承; - 选择 “将已继承的权限转换为此对象的显式权限”;
- 删除所有非当前用户的权限条目(仅保留自己的 “完全控制” 权限);
- 对
config文件执行相同操作:右键config→ 属性 → 安全 → 确保仅当前用户有访问权限。
- 打开
- 手动指定
config文件路径:- 打开 VS Code → 设置(
Ctrl+,)→ 搜索 “Remote.SSH: Config File”; - 输入
config文件的绝对路径(如C:\Users\张三\.ssh\config),避免中文和空格,点击保存。
- 打开 VS Code → 设置(
- 修复或重装 OpenSSH 客户端:
- 打开 Windows “设置”→“应用”→“可选功能”→ 找到 “OpenSSH 客户端”;
- 点击 “卸载”,重启电脑后重新安装;
- 验证版本:打开 PowerShell,输入
ssh -V,需输出OpenSSH_for_Windows_8.1p1及以上版本。
- 修复
config文件语法:- 删除现有
config文件,新建一个空文本文件,重命名为config(无.txt后缀); - 用 VS Code 打开,重新写入极简配置(避免语法错误):
Host myserver HostName 123.123.123.123 User devuser Port 22 - 保存后重新发起连接。
- 删除现有
- 临时绕过
config文件:- 按
Ctrl+Shift+P→ “Remote-SSH: Connect to Host...” → 直接输入devuser@123.123.123.123(不通过 config 文件),测试是否能连接。
- 按
8.3 问题 3:VS Code Server 安装失败(如 “Failed to install VS Code Server”)
表现:首次连接时,VS Code 右下角提示 “Installing VS Code Server on remote host...” 后失败,提示 “Failed to install VS Code Server”“Timeout” 或 “Permission denied”。原因分析:
- 服务器网络差,无法从 VS Code 官方服务器下载安装包(国内服务器常见);
- 服务器磁盘空间不足(VS Code Server 需至少 100MB 空闲空间);
- 服务器用户权限不足,无法在
~/.vscode-server目录下写入文件; - 密码登录时,
~/.vscode-server目录被 root 用户创建,当前用户无读写权限; - VS Code 本地版本与服务器 VS Code Server 版本不兼容。分步解决:
- 检查服务器磁盘空间:
# 查看根目录空闲空间(需 > 100MB) df -h /- 若空间不足,清理无用文件:
- Ubuntu:
sudo apt clean(清理 apt 缓存)、sudo rm -rf ~/.cache(清理用户缓存); - CentOS:
sudo yum clean all(清理 yum 缓存)。
- Ubuntu:
- 若空间不足,清理无用文件:
- 手动创建
~/.vscode-server目录并授权:# 创建目录 mkdir -p ~/.vscode-server # 开放读写权限(安装后可改为 755) chmod 777 ~/.vscode-server - 手动安装 VS Code Server(适用于网络差的情况):
- 步骤 1:本地查看 VS Code 版本和 commit ID:打开本地终端,输入
code --version,输出示例:
第二行1.85.1 0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2 x640ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2即为 commit ID。 - 步骤 2:本地下载 VS Code Server 安装包:下载地址:
https://update.code.visualstudio.com/commit:<commit_id>/server-linux-x64/stable(将<commit_id>替换为本地获取的 commit ID,如https://update.code.visualstudio.com/commit/0ee08df0cf4527e40edc9aa28f4b5bd38bbff2b2/server-linux-x64/stable) - 步骤 3:上传安装包到服务器:本地终端执行
scp命令:
(scp ~/Downloads/vscode-server-linux-x64.tar.gz devuser@123.123.123.123:~/.vscode-server/~/Downloads/为本地安装包路径,根据实际情况修改) - 步骤 4:服务器端解压安装:
cd ~/.vscode-server # 解压安装包 tar -zxvf vscode-server-linux-x64.tar.gz # 重命名为 bin(VS Code 识别的目录名) mv vscode-server-linux-x64 bin # 恢复目录权限 chmod 755 ~/.vscode-server
- 步骤 1:本地查看 VS Code 版本和 commit ID:打开本地终端,输入
- 切换为密钥登录后重试:
- 密码登录可能因权限限制导致安装失败,配置 SSH 密钥认证后重新连接,通常能解决权限问题。
- 降低 VS Code 本地版本(极端情况):
- 若上述方法均无效,可能是 VS Code 最新版本与服务器兼容问题,可下载旧版本 VS Code(如 1.84.0)安装后重试(下载地址:https://code.visualstudio.com/updates/v1_84)。
8.4 问题 4:中文乱码(远程文件中文显示为问号 / 方块)
表现:远程文件中的中文注释、字符串显示为 ??? 或方块,远程终端执行命令输出中文也乱码。原因分析:
- 服务器
locale未配置为 UTF-8(默认可能为POSIX或其他编码); - VS Code 远程文件编码设置为非 UTF-8(如 GBK);
- 远程终端字符集不支持 UTF-8;
- 代码文件本身编码为非 UTF-8(如 Windows 本地保存为 GBK,上传到服务器后未转换编码)。分步解决:
- 配置服务器
locale为 UTF-8(远程终端执行):# 安装 UTF-8 locale(Ubuntu 部分版本默认未安装) sudo apt install locales -y # 生成 UTF-8 locale sudo locale-gen en_US.UTF-8 # 临时设置 locale(当前终端生效) export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8 # 永久设置 locale(重启后生效) echo "export LANG=en_US.UTF-8" >> ~/.bashrc echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc # 立即生效 source ~/.bashrc- CentOS 系统:
sudo yum install glibc-langpack-en -y sudo localedef -c -f UTF-8 -i en_US en_US.UTF-8 echo "export LANG=en_US.UTF-8" >> ~/.bashrc echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc source ~/.bashrc
- CentOS 系统:
- 验证
locale配置:locale- 所有字段(如
LANG、LC_CTYPE、LC_ALL)应显示en_US.UTF-8,若仍为其他编码,重新执行步骤 1。
- 所有字段(如
- 配置 VS Code 远程文件编码:
- 打开乱码文件 → 点击 VS Code 右下角的编码标识(如
GBK、UTF-8)→ 选择 “通过编码重新打开”→ 选择 “UTF-8”; - 设置默认编码:VS Code → 设置(
Ctrl+,)→ 搜索 “Files: Encoding”→ 选择 “utf8”; - 搜索 “Files: Auto Guess Encoding”→ 勾选(自动识别文件编码,避免手动切换)。
- 打开乱码文件 → 点击 VS Code 右下角的编码标识(如
- 配置 VS Code 远程终端编码:
- 打开 VS Code 远程终端 → 右键终端 → “终端设置”→ 搜索 “Terminal: Encoding”→ 选择 “utf8”;
- 搜索 “Terminal: Integrated: Charset”→ 输入 “utf-8”。
- 转换文件本身编码(若文件编码为非 UTF-8):
- 服务器端执行命令转换文件编码(以 GBK 转 UTF-8 为例):
# 安装 iconv 工具(转换编码) sudo apt install iconv -y # 转换文件编码(覆盖原文件,建议先备份) iconv -f GBK -t UTF-8 文件名 > 文件名.tmp && mv 文件名.tmp 文件名 - 本地保存文件时直接选择 UTF-8 编码:VS Code 本地编辑文件 → 右下角编码 → 选择 “通过编码保存”→ 选择 “UTF-8”,再上传到服务器。
- 服务器端执行命令转换文件编码(以 GBK 转 UTF-8 为例):
8.5 问题 5:文件保存慢 / 卡顿(修改后需几秒才能保存)
表现:编辑远程文件后按 Ctrl+S,需等待 3-5 秒才能保存成功,甚至提示 “保存失败:Connection timeout”,编辑大型文件时卡顿更明显。原因分析:
- 网络延迟高(服务器地域与本地距离过远,如本地在国内,服务器在国外);
- VS Code 监听过多文件(如
node_modules、build、dist等大文件夹,包含上万个子文件); - 服务器磁盘 I/O 繁忙(如正在编译大型项目、磁盘读写速率低);
- 服务器 CPU / 内存资源不足(如 1 核 1G 服务器同时运行编译和 VS Code Server,资源占满);
- VS Code 远程同步设置不当(如启用了 “实时同步所有文件”)。分步解决:
- 优化网络连接:
- 更换服务器地域:选择离本地最近的地域(如本地在上海,选阿里云 “华东 - 上海”);
- 关闭本地 VPN / 代理(部分 VPN 会路由国际流量,增加延迟);
- 测试网络延迟:本地终端执行
ping 服务器公网IP(Windows)或ping -c 10 服务器公网IP(macOS/Linux),理想延迟应 <50ms,若延迟> 200ms,建议更换服务器地域。
- 排除大文件夹监听(核心优化):
- 方法 1:VS Code 设置排除文件:打开 VS Code → 设置(
Ctrl+,)→ 搜索 “Files: Exclude”→ 点击 “添加模式”,添加以下路径(根据项目类型调整):
搜索 “Remote.SSH: Ignore Files”→ 同样添加上述路径,避免 VS Code 同步这些文件夹。**/node_modules **/dist **/build **/.git **/.idea **/target **/*.o **/*.log - 方法 2:在项目根目录创建
.vscode/settings.json,添加排除规则(仅对当前项目生效):{ "files.exclude": { "**/node_modules": true, "**/dist": true, "**/build": true }, "remote.SSH.ignoreFiles": { "**/node_modules": true, "**/dist": true, "**/build": true } }
- 方法 1:VS Code 设置排除文件:打开 VS Code → 设置(
- 检查服务器资源占用:
- 查看 CPU / 内存使用率:远程终端执行
top(实时监控)或htop(更直观,需安装sudo apt install htop);- 若 CPU 使用率长期 > 80%,关闭不必要的进程(如
kill -9 进程ID),或升级服务器配置(如 1 核 2G 升级为 2 核 4G); - 若内存使用率长期 > 80%,清理缓存(
sudo sync && sudo echo 3 > /proc/sys/vm/drop_caches),或关闭占用内存的服务。
- 若 CPU 使用率长期 > 80%,关闭不必要的进程(如
- 查看磁盘 I/O 使用率:远程终端执行
iostat -x 1(需安装sudo apt install sysstat);- 若
%util列(磁盘使用率)长期 > 90%,说明磁盘繁忙,暂停大型编译任务,或更换更快的磁盘(如 SSD 替代 HDD)。
- 若
- 查看 CPU / 内存使用率:远程终端执行
- 优化 VS Code 远程同步设置:
- 搜索 “Remote.SSH: Sync Files”→ 选择 “onSave”(仅在保存时同步,而非实时同步);
- 搜索 “Remote.SSH: Max Files To Sync Simultaneously”→ 减小数值(如从 10 改为 5),避免同时同步过多文件导致卡顿;
- 关闭 “远程文件实时预览”:搜索 “Remote.SSH: Enable File Watcher”→ 取消勾选(仅影响实时文件变化监控,不影响编辑保存)。
8.6 问题 6:调试时断点不生效(断点灰色,提示 “断点未绑定”)
表现:C/C++ 或前端项目调试时,设置的断点显示为灰色空心圆,调试启动后不触发,VS Code 提示 “Breakpoint ignored because generated code is not trusted” 或 “Breakpoint not bound”。原因分析:
- C/C++ 项目未带调试信息编译(未添加
-g选项,调试器无法识别代码行); - 本地文件与远程文件路径不匹配(如本地文件在
D:/project,远程文件在~/project,调试器无法关联); - 插件未正确安装(如 C/C++ 插件未在远程安装,或版本过低);
- 远程服务器时间与本地时间不一致(导致调试符号时间戳不匹配);
- 前端项目 source map 未生成或配置错误(JavaScript/TypeScript 项目)。分步解决:
针对 C/C++ 项目:
- 带调试信息重新编译:
- 远程终端执行编译命令,添加
-g选项(生成调试符号):# 单个文件编译 g++ -g main.cpp -o main # CMake 项目修改 CMakeLists.txt set(CMAKE_BUILD_TYPE Debug) # 启用 Debug 模式,自动添加 -g 选项 - 编译完成后,删除旧的可执行文件,确保运行的是带调试信息的版本。
- 远程终端执行编译命令,添加
- 确认断点设置在可执行代码行:
- 断点不能设置在注释、空行、变量声明行(如
int a;),需设置在函数体、循环、条件判断等可执行代码行。
- 断点不能设置在注释、空行、变量声明行(如
- 检查 C/C++ 插件安装:
- 确认 C/C++ 插件(
ms-vscode.cpptools)已在远程扩展市场安装,且版本最新; - 按
Ctrl+Shift+P→ “C/C++: Reset IntelliSense Database”→ 重置智能感知数据库,重新加载项目。
- 确认 C/C++ 插件(
针对前端(JavaScript/TypeScript/Vue)项目:
- 生成并配置 source map:
- JavaScript 项目:在
package.json中添加sourceMap: true(如 webpack 配置、vite 配置);- webpack 示例:
webpack.config.js中devtool: 'source-map'; - vite 示例:
vite.config.js中build.sourcemap: true。
- webpack 示例:
- TypeScript 项目:修改
tsconfig.json,确保以下配置:{ "compilerOptions": { "sourceMap": true, // 生成 source map "inlineSourceMap": false // 不内嵌 source map,生成独立 .map 文件 } }
- JavaScript 项目:在
- 重新打包项目:
- 执行
npm run build或yarn build,确保dist目录下生成.map文件(如main.js.map)。
- 执行
通用解决方案:
- 同步本地与远程文件路径(关键):
- VS Code 调试配置中添加路径映射(
pathMappings):- C/C++ 项目:编辑
launch.json,添加:"pathMappings": [ { "localRoot": "${workspaceFolder}", // 本地项目根目录 "remoteRoot": "${workspaceFolder}" // 远程项目根目录(必须与本地结构一致) } ] - 前端项目:编辑
launch.json(Node.js 调试),添加:"pathMappings": [ { "localRoot": "${workspaceFolder}/src", "remoteRoot": "${workspaceFolder}/src" } ]
- C/C++ 项目:编辑
- 确保本地与远程项目文件结构完全一致(文件名、文件夹层级无差异)。
- VS Code 调试配置中添加路径映射(
- 同步服务器与本地时间:
# 安装 ntpdate 工具 sudo apt install ntpdate -y # 同步阿里云时间服务器 sudo ntpdate ntp.aliyun.com # 设置硬件时间同步(避免重启后失效) sudo hwclock --systohc - 重新安装调试插件:
- 卸载远程的 C/C++ 或前端调试插件,重启 VS Code 后重新安装,确保插件与 VS Code 版本兼容。
- 清除调试缓存:
- 按
Ctrl+Shift+P→ “Debug: Clear All Breakpoints”→ 清除所有断点,重新设置; - 按
Ctrl+Shift+P→ “Developer: Reload Window”→ 重载 VS Code 窗口,重新启动调试。
- 按
8.7 问题 7:VS Code 远程终端无法输入中文
表现:远程终端中输入中文时无反应,或输入后显示为问号、乱码,无法正常输入中文注释或命令参数。原因分析:
- 服务器
locale未配置为 UTF-8(终端不支持中文输入); - VS Code 终端设置中禁用了中文输入,或字符集配置错误;
- Windows 下使用 PowerShell 作为远程终端(PowerShell 对中文输入支持不佳);
- 远程终端模拟器不支持中文(如
sh终端,建议使用bash或zsh)。分步解决:
- 确保服务器
locale已配置为 UTF-8(参考问题 4 的步骤 1); - 配置 VS Code 终端设置:
- 打开 VS Code → 设置(
Ctrl+,)→ 搜索 “Terminal: Enable Multi Line Paste”→ 勾选; - 搜索 “Terminal: Integrated: Allow Charsets”→ 确保包含 “utf8”;
- 搜索 “Terminal: Integrated: Shell Integration”→ 勾选(启用终端集成,优化输入支持)。
- 打开 VS Code → 设置(
- 更换终端模拟器(Windows 下重点):
- 若本地使用 PowerShell 作为 VS Code 终端,切换为 Git Bash 或 WSL 终端:
- 安装 Git Bash(参考 3.3 节);
- VS Code → 设置 → 搜索 “Terminal: Default Profile: Windows”→ 选择 “Git Bash”;
- 重新打开远程终端,测试中文输入。
- 若本地使用 PowerShell 作为 VS Code 终端,切换为 Git Bash 或 WSL 终端:
- 切换服务器终端为
bash或zsh:- 远程终端执行
echo $SHELL,查看当前终端; - 若为
sh,切换为bash:chsh -s /bin/bash(输入用户密码,重启终端生效); - 若需更友好的终端(如
zsh),安装并切换:sudo apt install zsh -y chsh -s /bin/zsh
- 远程终端执行
- 测试中文输入:
- 远程终端输入
echo "中文测试",若能正常显示 “中文测试”,说明配置成功; - 若仍乱码,重新执行
source ~/.bashrc或source ~/.zshrc,加载 locale 配置。
- 远程终端输入
九、安全加固:远程服务器防护进阶
远程开发的前提是服务器安全 —— 如果服务器被黑客入侵,不仅代码和数据会泄露,还可能被用于挖矿、攻击其他服务器等非法活动。以下是生产环境必备的安全加固步骤,补充了更多实战细节和自动化工具配置:
9.1 禁用 root 登录
详细步骤:
- 编辑
sshd_config:sudo nano /etc/ssh/sshd_config; - 设置
PermitRootLogin no,保存后重启 SSH 服务:sudo systemctl restart sshd; - 验证 root 登录禁用:
- 本地终端执行
ssh root@服务器IP,若提示 “Permission denied (publickey)”,说明禁用成功; - 若仍能登录,检查
sshd_config中是否有多个PermitRootLogin配置(需确保所有配置都为no),或重启 SSH 服务后重试。
- 本地终端执行
- 应急方案(误禁用普通用户登录时):
- 若配置错误导致普通用户也无法登录,通过云厂商控制台的 “救援模式” 登录服务器(如阿里云 ECS 救援模式、腾讯云实例救援);
- 挂载系统磁盘,修改
sshd_config恢复PermitRootLogin yes,重启服务器后重新配置。
9.2 更改默认 SSH 端口
详细步骤:
- 选择合适的端口:建议选择 1024-65535 之间的端口,避免与常用端口冲突(如 80、443、3306、8080 等),推荐端口:2222、3389(非 Windows 远程桌面场景)、4444 等;
- 编辑
sshd_config:sudo nano /etc/ssh/sshd_config,将Port 22改为Port 2222(以 2222 为例); - 保存并重启 SSH 服务:
sudo systemctl restart sshd; - 放行新端口(防火墙 + 安全组):
- 服务器本地防火墙:
- Ubuntu(ufw):
sudo ufw allow 2222/tcp && sudo ufw reload; - CentOS(firewalld):
sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload;
- Ubuntu(ufw):
- 云平台安全组:登录云厂商控制台,删除原 22 端口规则,新增 2222 端口入方向规则,授权对象限制为自己的公网 IP(如
113.xxx.xxx.xxx/32),避免所有 IP 访问。
- 服务器本地防火墙:
- 端口冲突处理:
- 若修改端口后 SSH 服务启动失败,执行
sudo lsof -i:2222查看端口是否被占用; - 若被占用,选择其他端口(如 2223),重复步骤 2-4。
- 若修改端口后 SSH 服务启动失败,执行
- 更新本地连接配置:
- 本地
~/.ssh/config中Port改为 2222; - VS Code 重新连接时选择新配置,或直接输入
ssh devuser@服务器IP -p 2222。
- 本地
9.3 用 fail2ban 自动封禁恶意 IP
详细配置:
- 安装 fail2ban(Ubuntu 为例):
sudo apt install fail2ban -y; - 启动并设置开机自启:
sudo systemctl start fail2ban && sudo systemctl enable fail2ban; - 查看 fail2ban 状态:
sudo systemctl status fail2ban(确保状态为active (running)); - 自定义 SSH 防护规则:
- 复制默认配置文件(避免直接修改
jail.conf,升级时会被覆盖):sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local - 编辑自定义规则:
sudo nano /etc/fail2ban/jail.local,找到[sshd]部分,修改以下参数:ini
[sshd] enabled = true port = 2222 # 改为你自定义的 SSH 端口 filter = sshd logpath = /var/log/auth.log # Ubuntu 系统日志路径 # CentOS 系统日志路径:/var/log/secure maxretry = 3 # 10 分钟内登录失败 3 次触发封禁 bantime = 86400 # 封禁 24 小时(单位:秒,86400=24h) findtime = 600 # 统计时间窗口(10 分钟,单位:秒) ignoreip = 113.xxx.xxx.xxx # 忽略自己的公网 IP,避免误封禁 - 保存后重启 fail2ban:
sudo systemctl restart fail2ban;
- 复制默认配置文件(避免直接修改
- fail2ban 常用命令(实战必备):
- 查看 sshd 防护状态(封禁的 IP 列表):
sudo fail2ban-client status sshd; - 解封特定 IP:
sudo fail2ban-client set sshd unbanip 192.168.1.100(替换为被封禁的 IP); - 手动封禁 IP:
sudo fail2ban-client set sshd banip 192.168.1.100(针对已知恶意 IP); - 查看 fail2ban 日志(排查封禁原因):
sudo tail -f /var/log/fail2ban.log;
- 查看 sshd 防护状态(封禁的 IP 列表):
- 扩展:监控其他服务(如 nginx 暴力破解):
- 若服务器部署了 nginx,可添加 nginx 防护规则(参考 fail2ban 官方文档),自动封禁频繁访问不存在页面、暴力破解后台的 IP。
9.4 定期更新系统与软件
手动更新:
- Ubuntu:
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean; - CentOS:
sudo yum update -y && sudo yum autoremove -y。
自动化更新脚本(带邮件通知):
- 安装邮件发送工具:
sudo apt install sendmail mailutils -y(Ubuntu); - 创建更新脚本:
nano ~/auto_update.sh,写入以下内容:#!/bin/bash # 系统自动更新脚本,带邮件通知 LOG_FILE="/var/log/system_update.log" EMAIL="your_email@example.com" # 替换为你的邮箱 # 记录开始时间 echo "=== 系统更新开始:$(date +'%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE # 执行更新 sudo apt update -y >> $LOG_FILE 2>&1 sudo apt upgrade -y >> $LOG_FILE 2>&1 sudo apt autoremove -y >> $LOG_FILE 2>&1 sudo apt clean >> $LOG_FILE 2>&1 # 记录结束时间和结果 echo "=== 系统更新结束:$(date +'%Y-%m-%d %H:%M:%S') ===" >> $LOG_FILE echo "更新日志已保存到 $LOG_FILE" >> $LOG_FILE # 发送邮件通知 mail -s "服务器系统更新完成($(date +'%Y-%m-%d'))" $EMAIL < $LOG_FILE - 赋予执行权限:
chmod +x ~/auto_update.sh; - 设置定时任务(每周日凌晨 3 点执行):
加入以下内容:crontab -e0 3 * * 0 /home/devuser/auto_update.sh # 替换为脚本实际路径- 解释:
0 3 * * 0表示每周日凌晨 3 点,/home/devuser/auto_update.sh为脚本路径(通过pwd命令查看脚本所在路径);
- 解释:
- 测试脚本:
sudo ~/auto_update.sh,查看邮箱是否收到通知邮件,检查/var/log/system_update.log确认更新是否正常。
9.5 额外安全加固措施(生产环境必备)
- 限制登录 IP(最有效的防护):
- 云平台安全组:将 SSH 端口(如 2222)、Web 端口(如 80、443)的授权对象改为自己的公网 IP(可通过
https://ip.cn查询),或公司内网 IP 段(如192.168.0.0/24); - 服务器本地防火墙限制:仅允许特定 IP 访问 SSH 端口:
(替换# Ubuntu(ufw):先删除原有 2222 端口规则,再添加允许 IP sudo ufw delete allow 2222/tcp sudo ufw allow from 113.xxx.xxx.xxx to any port 2222 proto tcp sudo ufw reload113.xxx.xxx.xxx为你的公网 IP)。
- 云平台安全组:将 SSH 端口(如 2222)、Web 端口(如 80、443)的授权对象改为自己的公网 IP(可通过
- 启用 SSH 日志审计:
- 编辑
sshd_config:sudo nano /etc/ssh/sshd_config; - 设置
LogLevel VERBOSE(详细日志,记录所有 SSH 登录、操作); - 重启 SSH 服务:
sudo systemctl restart sshd; - 配置日志轮转(避免日志过大):
sudo nano /etc/logrotate.d/ssh,确保以下配置:
(日志每日轮转,保留 7 天,压缩旧日志);/var/log/auth.log { daily rotate 7 missingok notifempty compress delaycompress sharedscripts postrotate invoke-rc.d ssh reload > /dev/null endscript } - 实时监控 SSH 登录:
sudo tail -f /var/log/auth.log,及时发现异常登录。
- 编辑
- 禁用无用服务与端口:
- 查看所有启用的服务:
sudo systemctl list-unit-files --type=service --state=enabled; - 禁用无用服务(如
avahi-daemon(局域网发现)、cups(打印服务)、telnet(远程登录,已被 SSH 替代)):sudo systemctl disable --now avahi-daemon sudo systemctl disable --now cups - 关闭不必要的端口:通过
sudo netstat -tuln查看监听端口,禁用对应服务或在防火墙中关闭。
- 查看所有启用的服务:
- 使用防火墙限制出站流量:
- 仅允许服务器访问必要的外部端口(如 80、443(HTTP/HTTPS)、53(DNS)、25(邮件)),禁止访问其他端口,防止服务器被入侵后作为跳板攻击其他服务器:
# Ubuntu(ufw):默认拒绝所有出站流量,再允许必要端口 sudo ufw default deny outgoing sudo ufw allow out 80/tcp # HTTP sudo ufw allow out 443/tcp # HTTPS sudo ufw allow out 53/udp # DNS sudo ufw allow out 25/tcp # 邮件(若需发送通知) sudo ufw reload - 根据项目需求调整允许的出站端口(如 C/C++ 项目需访问 GitHub 仓库,允许 9418(Git)端口)。
- 仅允许服务器访问必要的外部端口(如 80、443(HTTP/HTTPS)、53(DNS)、25(邮件)),禁止访问其他端口,防止服务器被入侵后作为跳板攻击其他服务器:
- 定期备份数据:
- 重要代码和数据定期备份到本地或对象存储(如阿里云 OSS、腾讯云 COS);
- 自动化备份脚本(示例:备份
~/project目录到本地):#!/bin/bash BACKUP_DIR="/home/devuser/backup" PROJECT_DIR="/home/devuser/project" DATE=$(date +'%Y%m%d') # 创建备份目录 mkdir -p $BACKUP_DIR # 压缩备份 tar -zcvf $BACKUP_DIR/project_backup_$DATE.tar.gz $PROJECT_DIR # 保留 30 天备份 find $BACKUP_DIR -name "project_backup_*.tar.gz" -mtime +30 -delete # 可选:上传到 OSS(需安装 ossutil 工具) # ossutil cp $BACKUP_DIR/project_backup_$DATE.tar.gz oss://your-bucket/backup/ - 设置定时任务(每天凌晨 2 点执行):
0 2 * * * /home/devuser/auto_backup.sh。
十、总结与进阶:
10.1 核心流程回顾
至此,我们已经完成了从 “云服务器选购” 到 “远程开发、调试、插件配置、安全加固” 的完整流程,核心逻辑可总结为 “六大步骤”:
- 基础配置:服务器创建非 root 用户 + 开启 SSH 服务 + 放行端口(安全组 + 本地防火墙);
- 本地准备:安装 VS Code + Remote-SSH 插件 + OpenSSH 客户端(三平台全覆盖);
- 连接方式:密钥认证(长期开发,安全免密)或密码认证(临时测试,快速上手);
- 远程开发:编辑文件(本地操作,远程同步)→ 编译 / 运行(远程终端)→ 调试(VS Code 调试功能,支持 C/C++、前端项目);
- 效率提升:安装远程插件(20 个实用插件,覆盖开发、协作、效率场景);
- 安全加固:禁用 root 登录 + 更改 SSH 端口 + fail2ban 封禁恶意 IP + 定期更新 + 数据备份。
10.2 进阶技巧:让远程开发更高效
技巧 1:用 tmux 实现会话持久化(避免断开连接后程序停止)
- 问题:远程终端中运行的程序(如 C/C++ 编译、前端项目启动、服务器部署),断开 SSH 连接后会被终止;
- 解决方案:使用
tmux工具,保持会话在服务器后台运行,下次连接可恢复; - 详细操作步骤:
- 服务器安装 tmux:
sudo apt install tmux -y(Ubuntu)或sudo yum install tmux -y(CentOS); - 新建会话:
tmux new -s dev_session(dev_session为会话名,可自定义,如cpp_build、frontend_dev); - 在会话中运行程序(如
g++ main.cpp -o main && ./main、npm run dev); - 断开会话(不停止程序):按
Ctrl+B→ 松开后按D(detach 会话); - 查看所有会话:
tmux ls(列出所有后台会话); - 重新连接会话:
tmux attach -t dev_session(dev_session为会话名); - 切换会话:
tmux switch -t another_session(切换到其他会话); - 关闭会话:
tmux kill-session -t dev_session(程序运行完成后关闭会话,释放资源); - 会话分屏(多任务并行):
- 横向分屏:
Ctrl+B→%; - 纵向分屏:
Ctrl+B→"; - 切换分屏:
Ctrl+B→ 方向键; - 关闭分屏:
Ctrl+B→x。
- 横向分屏:
- 服务器安装 tmux:
技巧 2:用 rsync 同步本地与远程文件(增量同步,速度快)
- 问题:需要批量同步本地项目文件到远程,或备份远程文件到本地,传统
scp命令每次都全量复制,速度慢; - 解决方案:使用
rsync工具,支持增量同步(仅复制变化的文件),节省带宽和时间; - 常用命令(实战示例):
- 本地文件夹同步到远程(如本地
D:/project同步到远程~/project):# Windows(Git Bash) rsync -avz /d/project/ devuser@123.123.123.123:~/project/ # macOS/Linux rsync -avz ~/project/ devuser@123.123.123.123:~/project/- 选项说明:
-a:归档模式,保留文件权限、时间戳、所有者等属性;-v:显示详细同步日志;-z:压缩传输(节省带宽,适合大文件);- 末尾的
/:本地路径加/表示同步文件夹内的内容,不加则同步文件夹本身。
- 选项说明:
- 远程文件夹同步到本地(备份远程文件):
rsync -avz devuser@123.123.123.123:~/project/ ~/local_backup/ - 排除特定文件 / 文件夹(如
node_modules、build):rsync -avz --exclude="node_modules" --exclude="build" --exclude="*.log" ~/project/ devuser@123.123.123.123:~/project/ - 定时同步(结合 crontab,自动备份):
# 每天凌晨 1 点同步本地文件到远程 0 1 * * * rsync -avz --exclude="node_modules" ~/project/ devuser@123.123.123.123:~/project/ >> /var/log/rsync_sync.log 2>&1
- 本地文件夹同步到远程(如本地
技巧 3:自建 Web IDE(code-server),浏览器中使用 VS Code
- 问题:需要在无 VS Code 客户端的设备(如平板、公共电脑)上进行远程开发,或需要多人共享开发环境;
- 解决方案:安装
code-server(VS Code 的 Web 版本),通过浏览器访问,功能与桌面版 VS Code 一致; - 安装步骤(服务器端):
- 安装依赖:
sudo apt install -y curl git; - 下载并安装 code-server:
curl -fsSL https://code-server.dev/install.sh | sh - 启动 code-server(基础配置):
code-server --port 8080 --auth password- 选项说明:
--port 8080:监听 8080 端口(可自定义,如 8888);--auth password:密码认证,启动后会提示设置密码(如Password: xxxxxxxx);- 其他选项:
--host 0.0.0.0(允许外部访问,默认仅本地访问)、--user-data-dir ~/.code-server(存储用户配置)。
- 选项说明:
- 放行 8080 端口(防火墙 + 安全组):
- 服务器本地防火墙:
sudo ufw allow 8080/tcp && sudo ufw reload; - 云平台安全组:新增 8080 端口入方向规则,授权对象限制为自己的公网 IP。
- 服务器本地防火墙:
- 浏览器访问:
- 本地浏览器输入
http://服务器公网IP:8080,输入设置的密码,即可进入 Web 版 VS Code; - 功能:支持远程文件编辑、插件安装、调试、终端操作,与桌面版完全一致;
- 本地浏览器输入
- 配置开机自启(避免服务器重启后需要手动启动):
写入以下内容:# 创建 systemd 服务文件 sudo nano /etc/systemd/system/code-server.service
保存后执行:[Unit] Description=code-server After=network.target [Service] User=devuser WorkingDirectory=/home/devuser ExecStart=/usr/bin/code-server --port 8080 --auth password --host 0.0.0.0 Restart=always [Install] WantedBy=multi-user.targetsudo systemctl daemon-reload sudo systemctl enable --now code-server
- 安装依赖:
技巧 4:使用 Docker 隔离远程开发环境(避免依赖冲突)
- 问题:多个远程项目依赖不同版本的工具(如 C++ 项目 A 依赖 GCC 9,项目 B 依赖 GCC 11;前端项目 C 依赖 Node.js 14,项目 D 依赖 Node.js 18),直接在服务器安装会导致依赖冲突;
- 解决方案:用 Docker 为每个项目创建独立容器,VS Code 连接到容器中开发,环境隔离,互不影响;
- 核心步骤:
- 服务器安装 Docker:
重启服务器或重新登录,使用户组配置生效。# Ubuntu 安装 Docker sudo apt update sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 启动 Docker 并设置开机自启 sudo systemctl start docker sudo systemctl enable docker # 将当前用户加入 docker 组(避免每次使用 sudo) sudo usermod -aG docker $USER - 拉取基础镜像(根据项目类型选择):
- C/C++ 项目:
sudo docker pull mcr.microsoft.com/vscode/devcontainers/cpp:0-ubuntu-22.04; - 前端项目(Node.js 16):
sudo docker pull mcr.microsoft.com/vscode/devcontainers/node:16-bullseye;
- C/C++ 项目:
- 启动容器(映射项目目录和端口):
# C/C++ 项目示例:映射本地 ~/cpp-project 到容器 /workspaces/cpp-project,映射端口 8080 sudo docker run -itd --name cpp-dev -v ~/cpp-project:/workspaces/cpp-project -p 8080:80 mcr.microsoft.com/vscode/devcontainers/cpp:0-ubuntu-22.04- 选项说明:
-itd:交互式、终端模式、后台运行;--name cpp-dev:容器名,自定义;-v ~/cpp-project:/workspaces/cpp-project:将服务器上的~/cpp-project目录映射到容器的/workspaces/cpp-project(双向同步,容器内修改会同步到服务器);-p 8080:80:将容器的 80 端口映射到服务器的 8080 端口(用于运行 Web 服务)。
- 选项说明:
- VS Code 连接到容器:
- 安装
Remote - Containers插件(已在 7.5 节推荐); - 按
Ctrl+Shift+P→ “Remote - Containers: Attach to Running Container”; - 选择刚才启动的容器(如
cpp-dev),VS Code 会自动连接到容器中;
- 安装
- 在容器中开发:
- 容器内已预装对应工具(如 GCC、CMake、Node.js),无需额外配置;
- 项目文件存储在服务器的
~/cpp-project目录,容器删除后数据不丢失; - 多人协作:将 Dockerfile 和容器配置提交到 Git 仓库,同事拉取后可快速启动相同容器环境。
- 服务器安装 Docker:
结语:让远程开发,成为你技术进阶的 “翅膀”
hello 大家,当你读到这里时,相信你已经跟着这篇博客,走完了从 “云服务器从零配置” 到 “VS Code 远程开发精通” 的完整旅程。从开篇提到的 Vim 配置延伸到 VS Code 的远程开发探索,我们用几万字的篇幅,拆解了每一个实操步骤,排查了每一个高频坑点,推荐了每一个能提升效率的插件 —— 这不仅仅是一份技术教程,更是一段 “从痛点到解决方案” 的实践记录,一份陪伴你突破开发瓶颈的指南。
回想一下,你现在已经掌握了什么?你能独立选购高性价比的云服务器,避开新手常踩的实例规格、操作系统选择的坑;你能熟练创建非 root 用户、配置 SSH 服务、放行端口,为远程开发打下安全的基础;你能在 Windows、macOS、Linux 三大平台搭建本地环境,用 SSH 密钥认证实现免密登录,告别每次输入密码的繁琐;你能流畅地用 VS Code 连接远程服务器,编辑文件、编译运行、调试代码,就像在本地开发一样自然;你知道 20 个远程开发必备插件的用法,能根据项目需求灵活搭配,让代码编写、团队协作、接口测试更高效;你能独立排查密钥登录失败、中文乱码、断点不生效等 90% 的高频问题,不再因为报错而手足无措;你还掌握了禁用 root 登录、更改 SSH 端口、用 fail2ban 封禁恶意 IP 等安全加固技巧,让服务器坚如磐石;最后,你还了解了 tmux、rsync、code-server、Docker 等进阶工具,能让远程开发效率再上一个台阶。
这些技能,看似是一个个独立的操作步骤,实则串联起了现代开发的核心需求 —— 解决本地资源不足的痛点,打破环境一致性的壁垒,摆脱设备与地域的限制,提升团队协作的效率。当你能在本地用熟悉的 VS Code 界面,操控云端服务器的强大算力,编译几十万行代码仅需几分钟;当你能在下班回家后,打开家用电脑就能无缝接续公司未完成的开发任务,无需重新配置任何环境;当你和团队成员共用一台测试服务器,无需通过 FTP 传输文件,实时协作却不会出现代码覆盖;当你用 Docker 隔离不同项目的依赖环境,彻底告别 “本地跑通,线上报错” 的噩梦 —— 你会发现,远程开发早已不是 “高级技巧”,而是能让你专注于代码本身、提升开发幸福感的 “必备技能”。
我知道,这趟学习之旅并不容易。或许你曾卡在 SSH 密钥认证的权限配置上,反复检查authorized_keys的权限却找不到问题;或许你曾因 VS Code Server 安装失败而沮丧,折腾了半天发现只是服务器磁盘空间不足;或许你曾为调试时断点不生效而抓狂,最后才发现是忘记添加-g编译选项。但请相信,每一次踩坑、每一次排查、每一次成功解决问题,都是你技术能力的沉淀。就像我们在问题排查章节中强调的,技术成长从来不是 “一蹴而就”,而是在 “遇到问题 — 分析问题 — 解决问题” 的循环中,逐渐积累经验、提升能力。这些你曾遇到的困难,终将成为你未来开发路上的 “底气”—— 当你再遇到类似问题时,你会从容不迫地定位原因、找到解决方案,这种 “独立解决问题” 的能力,远比记住几个命令更有价值。
在撰写这篇博客时,我一直在思考:为什么要花这么多篇幅,把每个步骤讲得如此细致?因为我深知,对于很多开发者来说,“远程开发” 是一个看似复杂的领域,一个小小的细节疏忽(比如防火墙端口未放行、config 文件路径写错),就可能让整个配置功亏一篑,进而打击学习的积极性。所以,我希望这篇博客能成为你的 “避风港”,让你无需在网上到处搜索零散的教程,无需在报错信息中迷茫,只需跟着步骤一步步操作,就能顺利搭建起属于自己的远程开发环境。
同时,我也希望这篇博客能给你带来更多启发:技术工具的本质是 “为了解决问题”。我们学习 VS Code 远程开发,不是为了追求 “技术潮流”,而是为了让开发更高效、更灵活、更安全;我们配置 SSH 密钥认证,不是为了炫技,而是为了杜绝暴力破解的风险;我们学习 Docker 容器隔离,不是为了增加复杂度,而是为了彻底解决依赖冲突的痛点。技术学习的路上,永远不要为了 “学技术而学技术”,而是要带着 “解决问题” 的目标去探索,这样才能真正把技术变成自己的 “武器”。
当你已经掌握了这篇博客中的所有内容,也请不要停下探索的脚步。远程开发的世界还有更多值得挖掘的技巧:比如用 CI/CD 工具将远程开发与自动化部署结合,让代码提交后自动构建、测试、部署;比如搭建多人协作的开发环境,用 GitLab CI/CD 实现代码审查与自动测试;比如探索云服务器的更多功能,如 GPU 实例用于 AI 模型训练、对象存储用于数据备份等。技术的海洋无边无际,每一次小小的探索,都可能带来意想不到的收获。
最后,我想对你说:开发之路,从来没有 “终点”,只有 “不断进阶的旅程”。或许你现在是刚入门的新手,或许你是正在深耕某一领域的工程师,或许你是带领团队前行的技术负责人 —— 但无论身处哪个阶段,保持对技术的好奇与热爱,保持解决问题的耐心与坚持,就一定能在技术的道路上走得更远、更稳。
这篇关于 VS Code 远程开发的博客到这里就结束了,但你的远程开发之旅才刚刚开始。希望你能把这篇博客中学到的技能,运用到实际的项目开发中,让远程开发成为你技术进阶的 “翅膀”,帮助你突破瓶颈、提升效率、创造更多有价值的作品。如果在实践过程中遇到任何问题,欢迎随时回头翻阅这篇博客的问题排查章节,也欢迎和我交流你的心得与困惑。
愿你在未来的开发路上,少踩坑、多收获,每一次远程连接都顺畅无阻,每一次代码编写都得心应手,每一次技术探索都充满喜悦。我们下一篇博客,再见!
更多推荐


所有评论(0)