实战:VS Code 搭配 ProxyJump 实现在家直连公司内网算力服务器

0. 背景 : 拒绝“远程套娃”

最近搞定了家里的网络环境,通过内网穿透映射到了公司的办公机(Ubuntu)。原本的操作链路是:家里 Windows -> SSH/向日葵 -> 公司办公机 -> SSH -> 内网算力服务器

这种“套娃”式开发极其痛苦:不仅操作有延迟,而且无法直接使用本地 VS Code 的强大插件生态来调试内网服务器上的代码。

其实,利用 OpenSSH 的 ProxyJump 功能,我们完全可以打通这条链路,实现 VS Code (Home) -> 算力服务器 的丝滑直连,就像服务器摆在家里一样。

本文记录了在 Windows 客户端下的配置细节,以及如何解决 Windows 缺失 ssh-copy-id 的痛点。

1. 架构梳理与准备

我们要打通的链路如下:

  • 本地端 (Client):Windows 电脑,安装 VS Code。
  • 跳板机 (Jump Host):公司办公机 (Ubuntu),已做公网映射。
    • 假设公网映射 IP:x.x.x.x
    • 映射端口:9000
    • 内网用户名:jump_user
  • 目标机 (Target):内网两台 GPU 服务器 llmflux
    • 内网 IP 段:172.26.x.x
    • 端口:8022

2. 配置文件 : 核心 ProxyJump 设定

在 Windows 本地,打开 VS Code,F1 输入 Remote-SSH: Open Configuration File,编辑 C:\Users\你的用户名\.ssh\config

这里最大的技巧在于使用 ProxyJump 指令,让 SSH 自动处理跳转逻辑,而无需手动分步连接。

# --- 1. 跳板机(公司办公电脑) ---
Host jump-pc
    # 内网穿透的公网 IP
    HostName x.x.x.x
    # 映射出来的端口
    Port 9000
    User jump_user
    # 建议开启压缩,提升内网穿透下的传输速度
    Compression yes

# --- 2. 目标服务器 LLM ---
Host llm
    # 这里填公司内网的真实 IP
    HostName 172.26.x.156
    Port 8022
    User root
    # 【核心配置】指定通过 jump-pc 跳转
    ProxyJump jump-pc

# --- 3. 目标服务器 FLUX ---
Host flux
    HostName 172.26.x.133
    Port 8022
    User root
    ProxyJump jump-pc
    # 注意:如果你本地 Windows 没有在 7890 跑代理软件,
    # 建议先注释掉下面这行,否则连接会报端口转发错误
    # RemoteForward 8888 127.0.0.1:7890

注意RemoteForward 是反向代理,用于让服务器借用本地的网络环境(如拉取 HuggingFace 模型)。如果本地没开对应代理软件,开启此项会导致 SSH 连接时报 Warning,虽不影响连接,但看着心烦。

3. 密钥分发 : 解决 Windows 无 ssh-copy-id 问题

配置好 Config 后,理论上已经可以连接了,但每次都需要输入两次密码(跳板机一次,目标机一次),体验极差。我们需要配置 SSH Key 免密登录

Linux/Mac 下通常用 ssh-copy-id 一键搞定,但 Windows 默认没有这个命令。我们可以利用 PowerShell 的管道命令实现同样的效果。

前提:确保你在 Windows 上已经有了公钥(没有则运行 ssh-keygen 一路回车)。

3.1 步骤一:打通跳板机 (Windows -> Jump Host)

打开 PowerShell,执行以下命令(注意替换真实 IP):

# 读取本地公钥 -> 通过 SSH 发送 -> 追加到远程 authorized_keys
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh -p 9000 jump_user@x.x.x.x "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

输入密码后,尝试 ssh jump-pc,如果直接进入,说明第一层打通成功。

3.2 步骤二:隔山打牛 (Windows -> Target Host)

这里有一个很酷的技巧:既然我们在 Config 里配置了 ProxyJump,SSH 命令也会自动遵循这个路径。我们可以直接把公钥“穿透”发给内网服务器。

发送给 llm 服务器:

# SSH 会自动先连跳板机,再连 llm,最后执行写入
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh llm "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

发送给 flux 服务器:

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh flux "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

提示:执行上述命令时,因为第一层已经免密,你只需要输入目标服务器(root)的密码即可。

4. 最终效果

重启 VS Code,点击左侧 Remote Explorer

你会发现 llmflux 已经在列表里了。直接点击连接,VS Code 左下角状态栏会经历 Opening Remote -> Setting up SSH Host,几秒钟后,你就能直接看到内网服务器的文件目录。

现在,调试代码、监控 GPU 状态 (nvtop),所有操作都在你本地的 VS Code 界面内完成,中间的跳板机对你来说已经是完全透明的了。


已发布

分类

,

来自

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注