WinRM 远程连接 IDA PC(2026-08-01 决策)

背景

Sozo PC 需要远程操控 IDA PC(DESKTOP-GKHUGAD, 100.103.118.9)。原计划用 OpenSSH,但 SSH 在 Tailscale 网络下 preauth 阶段反复卡死(客户端显示 “Server accepts key” 后无下文,ETW 日志显示 [preauth] 断开)。

根因分析(IDA 侧 Antigravity 诊断)

  • SSH 密钥交换发大包,经 Tailscale UDP 隧道时 MTU 超限被静默丢弃(PMTUD 黑洞)
  • 尝试过:MTU 1280→1200、压缩 -C、aes128-gcm、新密钥、Run unattended + 重启 → 均无效
  • 双方配置 100% 正确(公钥、sshd_config、DefaultShell)

解决方案:WinRM

用 Windows 原生 WinRM(HTTP 5985)替代 SSH,一次成功:

端点http://100.103.118.9:5985/wsman
用户IDA
密码用户提供的 IDA 登录密码
认证NTLM

IDA 侧配置(Antigravity 执行):

  • Enable-PSRemoting -Force -SkipNetworkProfileCheck
  • Set-Service WinRM -StartupType Automatic
  • Set-Item WSMan:\localhost\Client\TrustedHosts -Value "100.83.112.84" -Force
  • 防火墙规则 WinRM-In (TCP 5985)

验证(Sozo 侧)

import winrm
s = winrm.Session('http://100.103.118.9:5985/wsman', auth=('IDA','密码'), transport='ntlm')
r = s.run_cmd('cmd /c hostname')  # → DESKTOP-GKHUGAD

✅ 远程执行命令、写文件、读系统信息全部成功

权限对比

  • WinRM 直接以 Windows 用户身份运行(IDA = Administrators 组成员 = 管理员权限)
  • 比 SSH 的”映射用户”更直接,能调 PowerShell 全能力(WMI/注册表/服务)

教训

在 Tailscale/WireGuard 等 VPN 环境下,SSH 大包握手容易卡死,WinRM(HTTP)更稳。Windows 远程管理优先考虑 WinRM。

相关

  • skill: winrm-remote-control
  • 脚本: D:\hermes\hsdesign_work\winrm_cmd.py