跳过正文
  1. 系列/
  2. 技术番外/

番外:VS Code + Remote-SSH 模式

其雁过无痕
作者
其雁过无痕
目录

对于拥有海外小性能 VPS 的开发者来说,高物理延迟往往是绕不开的痛。如果还在使用传统的终端工具(如 FinalShell),忍受着 nanovim 编辑长文本时吞换行、卡顿的折磨,那么 VS Code + Remote-SSH 绝对是救星。

它能将本地强悍的编辑体验直接“嫁接”到远端服务器上,实现“本地丝滑敲代码,远端零感存文件”的现代运维工作流。

一、 核心优势:为什么放弃传统终端?
#

  1. 降维打击的编辑体验: 告别终端编辑器,直接在 VS Code 侧边栏双击打开服务器文件。支持完美复制粘贴、全局搜索、快捷键撤销,所有修改在按下 Ctrl + S 的瞬间自动同步到远端。
  2. 极简的文件传输: 放弃繁琐的 SFTP 客户端,直接把本地文件拖拽进 VS Code 左侧目录即可完成上传。
  3. 内网穿透神技(端口转发): 无需修改防火墙,VS Code 可直接将远端 Docker 容器跑的测试端口映射到本地,直接用 localhost:端口号 在本地浏览器预览。

二、 环境说明与准备工作
#

本教程基于以下环境配置(进行了基本的安全加固):

  • 本地环境: Windows 11,已安装 VS Code
  • 远端服务器: Ubuntu 24.04 (位于美国芝加哥机房)
  • 安全策略: 已禁用密码登录,修改了默认 22 端口,采用 Ed25519 密钥认证,且私钥设置了保护密码(Passphrase)。

三、 核心配置步骤
#

Step 1: 安装核心插件
#

打开本地 VS Code,在扩展商店搜索并安装由 Microsoft 官方提供的 Remote - SSH 插件。

Step 2: 放置私钥并配置 config 文件
#

  1. 找到本地的 Ed25519 私钥文件(例如 id_ed25519),将其复制到 Windows 的默认 SSH 目录下:C:\Users\你的用户名\.ssh\
  2. 在 VS Code 中按 F1 呼出命令面板,输入 SSH: Open,选择 Remote-SSH: Open SSH Configuration File...,打开 ~/.ssh/config 文件。
  3. 按照以下格式填入服务器信息并保存:
Host RN_VPS-Chicago
    HostName 198.46.159.139  # 你的VPS真实公网IP
    User root                # 登录用户名
    Port 2222                # 你修改后的自定义SSH端口
    IdentityFile ~/.ssh/id_ed25519 # 指向你的私钥文件路径

Step 3: 解决频繁索要密钥密码的问题(配置 ssh-agent)
#

由于我的 Ed25519 密钥设置了保护密码,这个模式下保护密码的询问高频,即使是打开文件都会需要输入保护密码,相当的麻烦。我的解决方式是把密码交给 Windows 自带的 ssh-agent 管家管理。

  1. 管理员身份运行 Windows 的 PowerShell
  2. 依次执行以下命令,启动并设置代理服务为自启:
# 将 ssh-agent 服务设置为开机自动启动
Get-Service ssh-agent | Set-Service -StartupType Automatic

# 启动 ssh-agent 服务
Start-Service ssh-agent
  1. 将私钥添加进系统保险箱:
# 添加默认路径下的密钥
ssh-add

此时系统会提示 Enter passphrase for...,在此输入当初设置的密钥保护密码并回车。看到 Identity added 即代表成功。

重启 VS Code,再次点击左下角连接 RN_VPS-Chicago,此时应该已经实现了丝滑的无感秒连!

PS:可以尝试修改文件测试一下
#

以修改 Docker 部署的 Nginx 网关提示语为例:

  1. 加载工作区: 点击左侧蓝色的“打开文件夹”,在顶部弹出的输入框中直接回车(默认打开 /root/ 家目录),信任该作者后,左侧即可展现 Linux 系统的文件树。

  2. 修改文件: 在左侧目录中随便找一个文件做修改测试,我使用的是 nginx.conf(例如位于 /root/NGINX-PROXY/ 下),双击打开。像编辑本地文本一样加上修改:

<h1>网关配置成功...</h1>
<h1><i>网关配置成功...</i></h1>

这是加了一个 i 标签让字体倾斜

  1. 保存修改: 按下 Ctrl + S,文件瞬间同步到美国机房的硬盘上。

  2. 终端重启服务: 按下快捷键 Ctrl + `(Tab 键上方)呼出集成终端。确保当前路径位于项目目录下,执行重启命令:

# 重启对应的 Docker 容器
docker compose restart
  1. 验证: 浏览器刷新网页,即可看到斜体标签生效。

相关文章

番外:1G 小内存 VPS 部署 Java JSP 项目实战:Docker 本地构建 + 远程运行完美方案

在拥有了一台属于自己的 VPS(如 1核 1G内存,配置了 2G Swap)后,很多新手在尝试部署 Java 项目时,往往会选择直接在服务器上安装 Maven 或运行 docker build。但现实很残酷:Java 编译极其消耗内存,1G 的内存在构建瞬间就会被挤爆,导致系统卡死或触发 OOM (Out Of Memory) 杀掉进程。

番外:Dockerfile 常用指令详解

基础环境设置 # FROM:指定基础镜像 功能:这是每个 Dockerfile 的第一条指令(除注释外)。它决定了你的应用运行在什么环境之上。 示例:FROM ubuntu:24.04 (基于 Ubuntu 24.04 系统)或 FROM nginx:alpine (基于轻量级的 Nginx 镜像)。 WORKDIR:设置工作目录 功能:相当于 Linux 里的 cd 命令。后续的 RUN、CMD、COPY 等指令都会在这个目录下执行。如果目录不存在,Docker 会自动帮你创建。 示例:WORKDIR /app (将后续操作的默认路径设为容器内的 /app 目录)。 2. 文件复制 # COPY:复制文件/目录到容器中 功能:将宿主机(你的电脑或服务器)上的文件或目录,原封不动地拷贝到容器的指定路径下。 示例:COPY . /app (将当前宿主机目录下的所有文件,复制到容器的 /app 目录下)。 ADD:高级复制 功能:和 COPY 类似,但带有额外功能。如果复制的是一个本地的 .tar.gz 压缩包,ADD 会自动解压到目标路径;它也支持填入一个网络 URL 来下载文件。(新手推荐优先使用 COPY,语义更清晰)。 3. 执行命令与配置 # RUN:在构建镜像时执行命令 功能:这是构建阶段的主力军。通常用来安装软件包、创建文件夹、配置环境等。注意:每次 RUN 都会生成一个新的镜像层,所以通常会把多条命令用 && 连起来写。 示例:RUN apt-get update && apt-get install -y curl。 ENV:设置环境变量 功能:定义环境变量,后续的 RUN 指令可以使用,并且这些变量也会一直保留到容器运行阶段供你的程序读取。 示例:ENV MYSQL_ROOT_PASSWORD=my-secret-pw 或 ENV PORT=8080。 EXPOSE:声明监听端口 功能:这只是一个声明,告诉使用这个镜像的人,该容器内部的程序会使用哪个端口。它不会自动将端口映射到宿主机,映射依然需要在运行 docker run 时加上 -p 参数或在 docker-compose.yml 中配置。 示例:EXPOSE 80 (声明容器内的 Web 服务使用 80 端口)。 4. 容器启动指令 # CMD:容器启动时的默认命令 功能:指定容器跑起来之后要做的第一件事(例如启动 Nginx、运行 Java 后端应用等)。如果用户在 docker run 时手动指定了其他命令,CMD 的内容会被覆盖。 示例:CMD ["nginx", "-g", "daemon off;"]。 ENTRYPOINT:容器启动的主入口 功能:和 CMD 类似,但它不会被轻易覆盖。通常用于让容器表现得像一个独立的可执行程序。如果同时存在 ENTRYPOINT 和 CMD,CMD 的内容会作为参数传递给 ENTRYPOINT。 综合示例 # 为了方便理解,这里提供一个部署简单前端/静态网页的通用 Dockerfile 模板:

任务 3:熟练使用终端复用工具

核心目标 # 操作:安装并学习使用 tmux。 收获:掌握在服务器上跑长耗时任务的能力。即使本地 SSH 突然断开,任务依然会在后台运行,不会前功尽弃。 核心工具:tmux # tmux (Terminal Multiplexer) 是现代服务端开发的必备工具,解决了远程连接中途掉线导致任务中断的痛点。

任务 2:分配虚拟内存 (Swap)

Linux 服务器运维笔记:分配虚拟内存 (Swap) 避坑与实操 # 0. 背景与目标 # 在小内存(如 1GB RAM)的云服务器上运行 Java、MySQL 或进行前端构建时,物理内存极易耗尽导致进程被系统杀掉(OOM)。Swap(交换空间) 充当了“虚拟内存”的角色,是服务器在高负载下的“救命支撑”。