# 在 GPU 服务器上使用 VS Code Remote SSH 和 Jupyter

> 在您的 GPU 服务器上使用 VS Code Remote SSH，通过 SSH 隧道在远程 GPU 上运行 Jupyter，并用 rsync 和 scp 传输数据。采用安全的默认设置，分步讲解。

来源：https://fullgpu.com/zh/docs/remote-development  
更新日期：2026-10-22  
发布方：FullGPU (https://fullgpu.com/)

借助 VS Code Remote SSH，您可以像操作本地机器一样使用 GPU 服务器：编辑器运行在您的笔记本电脑上，而终端、Python 解释器和 GPU 都在服务器上。本页先介绍如何配置它，再说明如何通过 SSH 隧道在远程 GPU 上运行 Jupyter、用 tmux 保持会话不中断，以及用 rsync 和 scp 传输数据。本文假定您已有一个 [SSH 配置条目](https://fullgpu.com/zh/docs/ssh-access)，名为 `gpu1`。

## 通过 Remote-SSH 将 VS Code 连接到服务器

1. 在 VS Code 中安装由 Microsoft 发布的 **Remote - SSH** 扩展。
2. 打开命令面板（F1），运行 **Remote-SSH: Connect to Host...**，然后选择 `gpu1`。您的 `~/.ssh/config` 中的主机都会出现在列表中。
3. 首次连接时，VS Code 会在 GPU 服务器的 `~/.vscode-server` 中安装其服务器组件，这需要一分钟左右。
4. 用 **File > Open Folder** 打开服务器上的文件夹，例如 `/data/projects`。
5. 在远程端安装 Python 和 Jupyter 扩展：在扩展视图中，它们会显示 **Install in SSH: gpu1** 按钮。

检查方法：在 VS Code 中打开终端并运行 `nvidia-smi`。您应该会看到服务器的 GPU，窗口左下角会显示 `SSH: gpu1`。用 **Python: Select Interpreter** 选择项目的虚拟环境。VS Code 还可以通过这个连接直接打开 `.ipynb` notebook，无需隧道。

> 在 VS Code 终端中启动的进程依赖于 VS Code 的连接。请按下文所示在 tmux 中启动训练任务，这样即使笔记本电脑进入睡眠，任务也不会中断。

## 通过 SSH 隧道运行 JupyterLab

1. 在服务器上创建环境并安装 JupyterLab： `sudo apt install -y python3-venv python3 -m venv ~/venvs/lab source ~/venvs/lab/bin/activate pip install jupyterlab`
2. 在 tmux 中启动它，并且只监听回环接口： `tmux new -s lab source ~/venvs/lab/bin/activate jupyter lab --no-browser --ip=127.0.0.1 --port=8888` 它会输出一个包含令牌的 URL，例如 `http://127.0.0.1:8888/lab?token=...`。先按 Ctrl+B，再按 D，即可脱离会话。
3. 在您的笔记本电脑上打开隧道，并让它保持运行： `ssh -N -L 8888:127.0.0.1:8888 gpu1`
4. 把完整的 URL（包括令牌）粘贴到浏览器中。

检查方法：从 JupyterLab 启动器打开一个 Terminal，运行 `nvidia-smi`：您应该会看到服务器的 GPU。请把您使用的框架安装在同一个环境中，这样 notebook 才能导入它；安装方法见 [PyTorch 与 vLLM 指南](https://fullgpu.com/zh/docs/pytorch-vllm)。

> 切勿在公网 IP 上用 `--ip=0.0.0.0` 启动 Jupyter，也绝不要禁用它的令牌或密码。任何能访问到 Jupyter 服务器的人，都能以您的用户权限执行命令。请让它只监听 127.0.0.1，并通过隧道访问。在 Docker 中，请用 `-p 127.0.0.1:8888:8888` 发布端口，因为 Docker 发布的端口会绕过 ufw，详见[防火墙指南](https://fullgpu.com/zh/docs/networking-firewall)。

## 用 tmux 保持会话

断开连接后，tmux 会让 shell 及其中的进程继续在服务器上运行。如果系统中没有 tmux，请用 `sudo apt install -y tmux` 安装。最常用的命令如下：

| 操作 | 命令或按键 |
| --- | --- |
| 新建命名会话 | `tmux new -s train` |
| 脱离会话 | 先按 Ctrl+B，再按 D |
| 列出会话 | `tmux ls` |
| 重新接入 | `tmux attach -t train` |
| 新建窗口、切换到下一个窗口 | 先按 Ctrl+B 再按 C；先按 Ctrl+B 再按 N |
| 向上滚动查看历史输出 | 先按 Ctrl+B，再按 [（按 Q 退出） |
| 结束会话 | `tmux kill-session -t train` |

会话在断开连接后仍会保留，但在重启后不会。请同时把训练输出写入文件，例如 `python3 train.py 2>&1 | tee train.log`，以便日后查看。

## 用 rsync 和 scp 传输数据

rsync 只复制有变化的内容，并能续传中断的传输，这对数据集和检查点来说很重要。两端都必须安装 rsync：在 Ubuntu 上运行 `sudo apt install -y rsync`；在 Windows 上，请改用 WSL 或 scp。

```
# upload a dataset (the trailing slash copies the folder's contents)
rsync -avP ./dataset/ gpu1:/data/dataset/

# download checkpoints
rsync -avP gpu1:/data/checkpoints/run-01/ ./run-01/

# preview a mirror before running it for real
rsync -avP --delete --dry-run ./code/ gpu1:/data/projects/code/
```

`-a` 保留权限和时间戳，`-v` 列出文件，`-P` 显示进度并保留部分传输的文件，以便重新运行时续传。`--delete` 会删除目标端存在而源端没有的文件，因此请先加上 `--dry-run` 试运行。单个文件用 scp 就够了：

```
scp model.safetensors gpu1:/data/models/
scp gpu1:/data/results/metrics.csv .
```

在您的两台服务器之间传输时，在其中一台上运行 rsync，以另一台为目标。如果开通了[私有网络](https://fullgpu.com/zh/products/private-networking)，请使用私有地址，让传输不经过公网接口。`/data` 下的路径假定您已在该目录[挂载了 NVMe 数据盘](https://fullgpu.com/zh/docs/storage-nvme)。

## 故障排查

- **VS Code 无法连接，但 ssh gpu1 可以正常连接。**运行 **Remote-SSH: Kill VS Code Server on Host...**，然后重新连接。主目录空间已满也会导致安装失败，可以用 `df -h ~` 检查。
- **打开隧道时出现“bind: Address already in use”错误。**您笔记本电脑上的另一个程序占用了 8888 端口。请换一个本地端口，例如 `-L 8890:127.0.0.1:8888`，然后在浏览器中打开 8890 端口。
- **Jupyter 不接受令牌。**在已激活该环境的情况下，在服务器上运行 `jupyter server list`，输出当前的 URL 和令牌。

## 相关页面

- [通过 SSH 连接 GPU 服务器](https://fullgpu.com/zh/docs/ssh-access): 如何通过 SSH 连接 GPU 服务器：在 macOS、Linux 或 Windows 上创建 ed25519 密钥，连接服务器，添加团队成员，并禁用密码登录。步骤可直接复制。
- [使用 vLLM 部署 LLM 推理服务](https://fullgpu.com/zh/docs/pytorch-vllm): 在您的 GPU 服务器上用 vLLM 部署 LLM 推理服务：用 uv 配置 Python 环境，安装 PyTorch 和 vLLM，测试兼容 OpenAI 的 API，再将其作为系统服务长期运行。
- [在 Ubuntu 上挂载 NVMe 硬盘](https://fullgpu.com/zh/docs/storage-nvme): 如何在 Ubuntu 上挂载 NVMe 硬盘：用 lsblk 找到这些硬盘，格式化后按 UUID 写入 fstab，或用 mdadm 组建 NVMe RAID 0，另附硬盘健康检查与数据备份方法。
- [GPU 服务器带宽与出站流量费](https://fullgpu.com/zh/help/bandwidth-and-egress): FullGPU 的 GPU 服务器带宽与出站流量费：每台服务器每月含 20 TB 或 50 TB 出站流量，入站流量不计入，额度内不收取出站流量费。看看哪些流量会计入额度。
