devAlice
← Multi-OS

远程开发 — 通过 SSH · Tailscale · VS Code Remote 操作另一台机器

从笔记本电脑无缝驾驭家里的台式机 / 家庭服务器 / 云端工作站 — Tailscale · SSH · VS Code Remote-SSH · tmux 统一配置。

「把强劲的台式机留在家里,出行时轻装上阵」或「远程使用 GPU 工作站」——场景相同。核心工具:Tailscale(零配置 VPN)+ SSH + VS Code Remote-SSH + tmux。配置一次,咖啡馆的感觉就像坐在自己的桌面前。

我认为远程开发的关键不在于工具本身,而在于网络穿透的无感化。以前远程开发依赖企业 VPN 或端口转发;如今通过 Tailscale 的网状 VPN,NAT 穿透变得透明,由于那个无感的网络层,开发体验才真正接近本地。

TL;DR

  1. Tailscale — 网状 VPN,可穿透 NAT/防火墙。无需企业 VPN 即可连接机器
  2. SSH — 认证后的所有流量
  3. VS Code Remote-SSH — 像编辑本地文件一样编辑远程文件
  4. tmux — 会话持久化,工作不因断线而中断
  5. Mosh(可选)— SSH 替代方案,在移动网络下更稳定

前置条件

  • 两端均需 SSH + 账户 + 互联网连接
  • (可选)无需域名或静态 IP — Tailscale 帮你处理

1. Tailscale 配置

Tailscale 是基于 WireGuard 的网状 VPN。在每台机器上安装并登录相同账号 → 分配私有 IP(100.x.x.x),穿透 NAT,直接连接。

1.1 安装

Mac

brew install --cask tailscale

Windows

winget install --id tailscale.tailscale

Linux(Ubuntu)

curl -fsSL https://tailscale.com/install.sh | sh

1.2 登录

在每台机器上执行:

sudo tailscale up      # Mac/Linux
# 或使用 GUI 托盘 → Login

打开浏览器 → 用 Google/GitHub/Microsoft 注册(Tailscale 免费版支持 100 台设备)。

1.3 查看机器 IP

tailscale ip -4
# 100.x.x.x

或在 admin.tailscale.com 查看所有机器。

1.4 机器名称(MagicDNS)

管理控制台 → DNS → 启用 MagicDNS。之后可直接用名称 SSH,例如 desktop.tail-scale.ts.net

ssh me@desktop
# (自动补全 .tail-scale.ts.net)

启用后无需再关心私有 IP。本指南后续假设主机名为 desktop

2. SSH 准备

2.1 在远程机器上启用 SSH

Mac(远程)

  • 系统设置 → 通用 → 共享 → 远程登录 开启

Windows(远程)

  • 设置 → 系统 → 可选功能 → 安装 OpenSSH Server
  • PowerShell(管理员):
    Set-Service -Name sshd -StartupType Automatic
    Start-Service sshd

Linux(远程)

sudo apt install openssh-server
sudo systemctl enable --now ssh

2.2 注册 SSH 密钥

将本地公钥添加到远程机器的 ~/.ssh/authorized_keys

# 本地执行
ssh-copy-id me@desktop
# 或在远程手动操作:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA..." >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

2.3 连接

ssh me@desktop
# 或直接使用 100.x.x.x

3. VS Code Remote-SSH

本地速度在 VS Code 中编辑远程文件。

3.1 安装扩展

VS Code 应用市场搜索:

  • Remote - SSHms-vscode-remote.remote-ssh

或:

code --install-extension ms-vscode-remote.remote-ssh

3.2 连接

VS Code 命令面板(⌘⇧P / Ctrl+Shift+P) → Remote-SSH: Connect to Host → 输入 me@desktop

首次连接会在远程安装 VS Code Server(约 50MB,仅一次)。后续连接即时。

3.3 使用

左下角显示 SSH: desktop。File → Open Folder → 打开远程机器上的 ~/work/repo扩展安装在远程(例如 Python 扩展使用远程的 Python 环境)。

3.4 推荐扩展(远程安装)

  • ESLint / Prettier
  • Python / Pylance
  • Docker
  • (主题/快捷键保留在本地,界面更清爽)

4. tmux — 会话持久化

SSH 断线后,工作依然保留:

4.1 安装(远程)

# Mac / Linux 远程
brew install tmux   # Mac
sudo apt install tmux   # Ubuntu

4.2 使用

ssh me@desktop
tmux new -s work       # 新建会话
# ...工作中...
# Ctrl+B, D  → 分离(会话继续运行)
 
# 稍后
ssh me@desktop
tmux attach -t work    # 重新附加

4.3 常用快捷键

快捷键(前缀 = Ctrl+B操作
prefix + D分离
prefix + C新建窗口
prefix + N / P下一个/上一个窗口
prefix + %垂直分割
prefix + "水平分割
prefix + 方向键移动到相邻面板
prefix + Z缩放面板

4.4 自动附加

.zshrc(远程):

if [[ -z "$TMUX" && -n "$SSH_CONNECTION" ]]; then
  tmux attach -t main || tmux new -s main
fi

SSH 登录 → 自动附加到 main 会话(或新建)。

5. Mosh — 移动网络下使用

如果在网络切换时(5G ↔ Wi-Fi)SSH 频繁断线,可使用 Mosh(Mobile shell)。基于 UDP,本地回显,自动恢复。

brew install mosh
# 远程
sudo apt install mosh
mosh me@desktop

使用 SSH 进行认证 + UDP 端口 60000-61000。通过 Tailscale 时无需额外配置防火墙。

6. 场景:远程 GPU 工作站

目标:从笔记本电脑在台式机 GPU 上训练 ML 模型。

# 在笔记本上
ssh me@gpu-workstation
tmux new -s train
 
# 在 tmux 内
cd ~/projects/ml
python train.py --epochs 100
 
# Ctrl+B, D 分离
 
# 关上笔记本,移步咖啡馆
# 重新连接
ssh me@gpu-workstation
tmux attach -t train
# 训练继续进行

VS Code Remote 编辑代码 + tmux 中运行训练,两者同时进行。

7. 安全

Tailscale ACL(可选)

默认情况下,同一账号下的所有机器互相可见。公司/家庭混用时:

  • 管理控制台 → ACLs → JSON 策略
  • 基于标签的权限(tag:devtag:home

SSH 加固

在远程机器的 /etc/ssh/sshd_config 中:

PasswordAuthentication no       # 仅密钥登录
PermitRootLogin no
AllowUsers me
sudo systemctl restart sshd

1Password SSH Agent

参见密码管理器。配合 Tailscale + 1Password agent,SSH 登录只需生物识别,无需密码短语。

验证

  1. 两台机器上执行 tailscale status → 显示「online」
  2. ssh me@desktop → 即时登录(一次密码短语或生物识别)
  3. VS Code 命令面板 → Remote-SSH Connect → 编辑并保存 → 变更反映在远程
  4. tmux new -s test → 分离 → tmux attach -t test → 状态保留
  5. mosh me@desktop → 断开 Wi-Fi,切换网络 → 会话自动恢复

故障排查

Tailscale 无法连接

  • 两台机器均已执行 tailscale up 并登录
  • 管理控制台显示两台机器均为「Connected」
  • 防火墙 — Tailscale 使用 41641/UDP。企业网络可能封锁(会回退到 DERP 中继)

ssh: connect to host 100.x.x.x: Connection refused

  • 远程 SSH 服务未运行(重新检查第 2.1 节)
  • Windows:Get-Service sshd 是否为 Running?

VS Code Remote 速度慢

  • 首次连接安装 Server — 速度慢是正常现象
  • 若通过互联网连接(Tailscale 直连失败)— 用 tailscale ping desktop 查看是直连还是 DERP

tmux 颜色显示异常

.tmux.conf

set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"

Mosh 无法连接

UDP 60000-61000 被封锁 — 企业网络常见。回退到 SSH。Mosh 需要 UDP。

SSH agent 转发(请谨慎)

从远程机器再 SSH 到其他机器时,使用 ssh -A。仅在中间远程机器可信时使用 — 恶意的 root 用户可能看到密钥。

参考资料

更新日志

  • 2026-05-12:初稿。Tailscale · SSH · VS Code Remote · tmux · Mosh + 场景示例 · 安全 + 六个故障排查案例。