远程开发 — 通过 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
- Tailscale — 网状 VPN,可穿透 NAT/防火墙。无需企业 VPN 即可连接机器
- SSH — 认证后的所有流量
- VS Code Remote-SSH — 像编辑本地文件一样编辑远程文件
- tmux — 会话持久化,工作不因断线而中断
- Mosh(可选)— SSH 替代方案,在移动网络下更稳定
前置条件
- 两端均需 SSH + 账户 + 互联网连接
- (可选)无需域名或静态 IP — Tailscale 帮你处理
1. Tailscale 配置
Tailscale 是基于 WireGuard 的网状 VPN。在每台机器上安装并登录相同账号 → 分配私有 IP(100.x.x.x),穿透 NAT,直接连接。
1.1 安装
Mac:
brew install --cask tailscaleWindows:
winget install --id tailscale.tailscaleLinux(Ubuntu):
curl -fsSL https://tailscale.com/install.sh | sh1.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 ssh2.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_keys2.3 连接
ssh me@desktop
# 或直接使用 100.x.x.x3. VS Code Remote-SSH
以本地速度在 VS Code 中编辑远程文件。
3.1 安装扩展
VS Code 应用市场搜索:
- Remote - SSH(
ms-vscode-remote.remote-ssh)
或:
code --install-extension ms-vscode-remote.remote-ssh3.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 # Ubuntu4.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
fiSSH 登录 → 自动附加到 main 会话(或新建)。
5. Mosh — 移动网络下使用
如果在网络切换时(5G ↔ Wi-Fi)SSH 频繁断线,可使用 Mosh(Mobile shell)。基于 UDP,本地回显,自动恢复。
brew install mosh
# 远程
sudo apt install moshmosh 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:dev、tag:home)
SSH 加固
在远程机器的 /etc/ssh/sshd_config 中:
PasswordAuthentication no # 仅密钥登录
PermitRootLogin no
AllowUsers me
sudo systemctl restart sshd1Password SSH Agent
参见密码管理器。配合 Tailscale + 1Password agent,SSH 登录只需生物识别,无需密码短语。
验证
- 两台机器上执行
tailscale status→ 显示「online」 ssh me@desktop→ 即时登录(一次密码短语或生物识别)- VS Code 命令面板 → Remote-SSH Connect → 编辑并保存 → 变更反映在远程
tmux new -s test→ 分离 →tmux attach -t test→ 状态保留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 用户可能看到密钥。
参考资料
- Windows 初始配置 / Mac 初始配置 — 前置条件
- Windows git 认证 / 密码管理器 — SSH 密钥管理
- Tailscale(官方)
- VS Code Remote-SSH
- Mosh
更新日志
- 2026-05-12:初稿。Tailscale · SSH · VS Code Remote · tmux · Mosh + 场景示例 · 安全 + 六个故障排查案例。