Tailscale + SSH 多设备并网完整教程
适用人群:完全小白 目标:让多台设备(Windows、macOS、Linux)通过 Tailscale 组网,实现双向 SSH 免密访问 工具:Claude Code + 命令行
快速检查清单
开始前确保:
- 所有设备都已安装 Tailscale 并登录同一账号
- 了解如何使用 Claude Code 执行命令
- 有设备的管理员权限
第一步:确认 Tailscale 组网
1.1 在所有设备上查看 Tailscale 状态
Windows / PowerShell:
tailscale status
macOS / Linux:
tailscale status
1.2 记录设备信息
创建一个设备清单(示例):
| 设备名 | Tailscale IP | 系统 | 用户名 |
|---|---|---|---|
| laptop | 100.91.53.84 | Windows | user1 |
| macmini | 100.80.153.60 | macOS | user2 |
| server | 100.94.2.125 | Linux | root |
获取用户名命令:
# Windows$env:USERNAME# macOS/Linuxwhoami
第二步:生成 SSH 密钥对
2.1 检查是否已有密钥
# Windows/macOS/Linuxls ~/.ssh/id_ed25519*
如果已存在:跳过此步 如果不存在:继续执行
2.2 生成新密钥
ssh-keygen -t ed25519 -C "你的邮箱或标识"
一路按回车(使用默认路径,空密码)
第三步:配置免密登录
核心理解
| 系统 | 公钥存储位置 |
|---|---|
| macOS/Linux |
|
| Windows | ⚠️ |
3.1 场景一:macOS/Linux → macOS/Linux
假设:设备 A (100.x.x.1) 要免密登录设备 B (100.x.x.2)
在设备 A 上执行:
# 复制公钥到目标设备ssh-copy-id username@100.x.x.2
输入一次密码后永久生效
3.2 场景二:macOS/Linux → Windows
假设:Mac (100.80.153.60) 要免密登录 Windows (100.91.53.84)
方法 1:使用 ssh-copy-id(推荐)
# 在 Mac 上执行ssh-copy-id user@100.91.53.84
方法 2:手动复制(如果 ssh-copy-id 失败)
在 Mac 上获取公钥:
cat ~/.ssh/id_ed25519.pub
在 Windows 上(管理员 PowerShell):
# 创建目录(如果不存在)New-Item -ItemType Directory -Force -Path "C:\ProgramData\ssh"# 追加公钥(替换 <公钥内容>)Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value "<公钥内容>" -Force# 重启 SSH 服务Restart-Service sshd
3.3 场景三:Windows → macOS/Linux
在 Windows 上执行:
# 复制公钥到目标type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh user@100.x.x.x "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
输入一次密码后永久生效
3.4 场景四:Windows → Windows
在源 Windows 上获取公钥:
cat $env:USERPROFILE\.ssh\id_ed25519.pub
在目标 Windows 上(管理员 PowerShell):
Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value "<公钥内容>" -ForceRestart-Service sshd
第四步:验证免密登录
4.1 基础测试
# 测试免密连接ssh -o BatchMode=yes user@目标IP "echo 免密成功"
成功输出:
失败输出:免密成功
Permission denied
4.2 实际连接测试
# 实际连接ssh user@目标IP
如果不需要输入密码 → 配置成功 ✅
第五步:(可选)自动化密码输入
如果 ssh-copy-id 需要密码且无法手动输入,使用 expect:
在 macOS/Linux 上:
# 安装 expect(如果未安装)brew install expect # macOS# 或sudo apt install expect # Ubuntu/Debian# 自动化脚本cat << 'EOF' | expectset timeout 30spawn ssh-copy-id user@目标IPexpect "password:" { send "你的密码\r" }expect eofEOF
故障排查速查表
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| 公钥未正确添加 | 检查目标设备的 authorized_keys 文件 |
| Windows 免密失败 | 公钥位置错误 | 确认在
|
| Windows 写入失败 | 权限不足 | 使用管理员 PowerShell |
| Tailscale 未连接 | 检查
|
| SSH 服务未启动 | Windows: <br> Mac:
|
Windows 常见问题
检查 SSH 服务状态:
Get-Service sshd
如果未运行:
Start-Service sshdSet-Service sshd -StartupType Automatic
检查公钥文件权限:
icacls "C:\ProgramData\ssh\administrators_authorized_keys"# 应显示:Administrators:(F) 和 SYSTEM:(F)
修复权限:
icacls "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:ricacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "Administrators:F"icacls "C:\ProgramData\ssh\administrators_authorized_keys" /grant "SYSTEM:F"
macOS/Linux 常见问题
检查 SSH 权限:
ls -la ~/.ssh/authorized_keys# 应该是:-rw------- (600)
修复权限:
chmod 600 ~/.ssh/authorized_keyschmod 700 ~/.ssh
快速配置模板(复制粘贴用)
模板 A:两台 macOS/Linux 互连
# 设备 1 → 设备 2ssh-copy-id user2@设备2的IP# 设备 2 → 设备 1ssh-copy-id user1@设备1的IP
模板 B:Mac → Windows
# 在 Mac 上ssh-copy-id windows_user@Windows的IP
模板 C:Windows → Mac
# 在 Windows 上type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh mac_user@Mac的IP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
验证清单
完成后测试:
# 从设备 A 连接设备 Bssh user@设备B的IP "hostname"# 从设备 B 连接设备 Assh user@设备A的IP "hostname"# 如果都返回主机名,配置成功!
进阶配置(可选)
配置 SSH 别名
编辑
(或 Windows 的~/.ssh/config
):C:\Users\你的用户名\.ssh\config
Host macminiHostName 100.80.153.60User qycHost windowsHostName 100.91.53.84User QycHost serverHostName 100.94.2.125User root
之后只需:
ssh macminissh windowsssh server
禁用密码登录(仅允许密钥)
在目标设备上:
# 编辑 sshd_configsudo nano /etc/ssh/sshd_config # macOS/Linux# 或notepad C:\ProgramData\ssh\sshd_config # Windows
修改:
PasswordAuthentication no
重启 SSH 服务:
sudo systemctl restart sshd # Linuxsudo launchctl stop com.openssh.sshd && sudo launchctl start com.openssh.sshd # macOSRestart-Service sshd # Windows
总结
- 安装 Tailscale → 所有设备在同一虚拟网络
- 生成 SSH 密钥 → 每台设备生成 id_ed25519
- 交换公钥 → 复制到目标设备的 authorized_keys
- 验证 → 测试免密连接
核心要点:
- macOS/Linux 公钥在 ~/.ssh/authorized_keys
- Windows 公钥在 C:\ProgramData\ssh\administrators_authorized_keys
- 权限必须正确设置
- Windows 需要重启 sshd 服务
教程版本:v1.0 最后更新:2026-03-26 问题反馈:查看故障排查速查表