Tailscale直连Linux服务器需启用--ssh并避免端口冲突:普通SSH连100.x.y.z失败因未开启Tailscale SSH;用户态运行需nohup启动tailscaled;MagicDNS需双方开启且DNS指向100.100.100.100;VSCode卡住多因磁盘不足或~/.vscode-server权限错误。

不需要公网 IP、不用 VPS、不改系统配置,只要两台设备都装了 Tailscale 并登录同一账号,VSCode 就能通过 Remote - SSH 直连异地 Linux 服务器 —— 前提是你用的是用户态运行方式,且没踩进 tailscaled 权限和端口冲突的坑。
为什么普通 ssh 连不上 Tailscale 分配的 100.x.y.z 地址
常见现象是:ssh user@100.87.234.55 报错 Connection refused 或直接超时。这不是网络不通,而是你漏掉了关键一步:Tailscale 默认不开放 SSH 服务,它只建隧道,不自动代理端口。
- 必须在目标服务器上显式启用 SSH 支持:
tailscale up --ssh(注意:不是sudo tailscale up --ssh,除非你用 root 账号启动) - 如果服务器已有
sshd在监听 22 端口,--ssh会尝试接管 22,但失败时不报错,只会静默降级 —— 此时得手动指定非冲突端口,比如tailscale up --ssh --ssh-addr :2222 -
--ssh启用后,Tailscale 的 SSH 是独立于系统sshd的,认证走 Tailscale 账户体系,不读/etc/ssh/sshd_config,也不依赖PermitRootLogin等设置
普通用户无 sudo 权限时怎么跑 tailscaled
错误做法是直接运行 tailscale up,它会报 failed to connect to local tailscaled: dial unix /var/run/tailscale/tailscaled.sock: connect: no such file or directory —— 因为 tailscaled 没在后台运行。
- 必须先以用户态启动守护进程:
nohup tailscaled --state=/home/$USER/.local/share/tailscale/tailscaled.state --socket=/home/$USER/.local/share/tailscale/tailscaled.sock & - 然后用对应 socket 连接:
tailscale --socket=/home/$USER/.local/share/tailscale/tailscaled.sock login - 后续所有命令都要带
--socket参数,否则默认找系统级路径,权限不够就失败 - 别用
systemctl --user,很多内网服务器压根没启用 user session,nohup+&是最稳的保活方式
~/.ssh/config 里 HostName 写 IP 还是 MagicDNS 域名
写 100.x.y.z 看似简单,但 Tailscale 的 IP 可能随节点重启或网络变化而变;写 MagicDNS(如 server-name.tailxyz.ts.net)更可靠,但有两个硬性前提:
- 目标机器必须在 Tailscale 控制台中启用了
Enable MagicDNS(默认关) - 本地 Windows/macOS 必须也开了 MagicDNS,且 DNS 设置指向
100.100.100.100(Tailscale 的 DNS 服务器) - VSCode Remote - SSH 不自动读 MagicDNS,得手动在
~/.ssh/config里写全域名:HostName server-name.tailxyz.ts.net - 首次连接时若提示
Unknown host,先在终端执行ping server-name.tailxyz.ts.net确认解析成功,再试 VSCode
VSCode 连接后卡在 “Installing VS Code Server”
这通常不是网络慢,而是远程服务器磁盘空间不足或权限异常 —— ~/.vscode-server 目录写入失败时,VSCode 不报具体错误,只干等。
- 先手动检查:
df -h ~看家目录剩余空间,低于 500MB 就容易失败 - 确认
~/.vscode-server所有者是当前用户:ls -ld ~/.vscode-server,若属 root 或其他用户,删掉重建:rm -rf ~/.vscode-server && mkdir ~/.vscode-server - 如果服务器禁用了
tar或gzip(某些精简镜像),VSCode 无法解压 server 包,需提前安装:apt install tar gzip(Debian/Ubuntu)或yum install tar gzip(CentOS/RHEL) - 别指望“重试”按钮能解决问题,断开连接后手动清理再连,比反复点重试快得多
最易被忽略的一点:Tailscale 的 --ssh 和系统 sshd 共存时,22 端口归属权极易混乱。一旦发现 VSCode 能连上但 shell 空白、终端打不开,八成是 tailscale ssh 和 openssh-server 在抢端口 —— 此时要么停掉 sshd,要么让 Tailscale 绑定到别的端口,别硬扛。


















