实验室显卡与本机远程连接复盘:直连SSH到ZeroTier
适用场景Windows 实验室训练机、内网环境、个人主机稳定远程 SSH 接入这次要连接的是一台实验室 Windows 训练机配置为双RTX 5090。机器本身已经开启了 OpenSSH Server最初我们希望直接通过实验室内网地址连接10.195.63.48:22一开始 SSH 能用但后面频繁出现从外部连接超时。经过排查问题不是 sshd 服务坏了而是外部到实验室内网的访问路径不稳定。也就是说机器本地 SSH 是正常的但“外面打进去”不稳定。先确认实验室机 SSH 本身正常在实验室机上先检查 sshd 服务sc query sshd正常状态STATE : 4 RUNNING再看 22 端口是否监听netstat -ano | findstr :22正常TCP 0.0.0.0:22 0.0.0.0:0 LISTENING TCP [::]:22 [::]:0 LISTENING最后在实验室机本机测试 SSHssh admin127.0.0.1这一步能登录说明 OpenSSH 服务、账号、密码都没有问题。后续外部连不上重点怀疑网络路径、防火墙、安全软件或虚拟网卡入站策略。直接 SSH 为什么不稳定实验室机的内网地址 10.195.63.48 属于私有/校园内网地址。它能否被外部主机直接访问取决于当时的路由、网关、防火墙和校园网策略。我们观察到ping 10.195.63.48 超时 ssh admin10.195.63.48 超时但实验室机本地sshd 正常 22 端口监听正常 127.0.0.1 SSH 正常所以结论是SSH 服务没坏坏的是跨网访问路径。这也是后面要引入虚拟组网或反向隧道的原因。尝试过的方案方案一TailscaleTailscale 的思路是让两台机器加入同一个虚拟局域网然后通过 100.x.x.x 地址互相访问。但这次本机 Tailscale 出现了后端异常503 Service Unavailable: no backend服务看起来在运行但 CLI 和本地后端通信不稳定tailscale ip -4、tailscale up 经常无输出或卡住。卸载重装后仍然没有稳定可用的图形界面和后端状态。所以这次没有继续采用 Tailscale。方案二Pinggy 临时隧道Pinggy 可以不需要公网服务器直接由实验室机主动创建一个临时公网 TCP 隧道。实验室机上执行ssh -p 443 -o ServerAliveInterval60 -o TCPKeepAliveyes -R0:127.0.0.1:22 tcpa.pinggy.io成功后返回tcp://xxxxx.run.pinggy-free.link:39863然后外部主机尝试ssh -p 39863 adminxxxxx.run.pinggy-free.link这条路能成功生成临时隧道但实际 SSH 握手阶段不够稳定出现过Connection timed out during banner exchange所以它适合临时救急不适合作为长期训练机接入方案。方案三ZeroTierZeroTier 是这次最接近成功的方案。我们创建了一个虚拟网络Network ID: 76fc96e498dc实验室机加入后拿到10.59.120.22本机加入后拿到10.59.120.1实验室机加入命令C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat join 76fc96查看状态C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat info C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat listnetworks正常时可以看到200 info 57b2e3bc 1.16.1 ONLINE 200 listnetworks 76fc96e498d8 my-first-network ... 10.59.120.22网页后台需要把两个节点都勾选 Authorized。这一步很重要否则本机或实验室机可能 join OK但拿不到虚拟 IP。ZeroTier 打通后的排查ZeroTier 成功后本机可以 ping 通实验室机ping 10.59.120.222结果正常Reply from 10.59.120.222: bytes32 time13ms TTL57但 SSH 仍然超时ssh admin10.59.120.222结果ssh: connect to host 10.59.120.222 port 22: Connection timed out这说明三层网络已经通了但 TCP 入站被拦。在实验室机上确认 sshd 监听netstat -ano | findstr :22确认 ZeroTier 网卡powershell -Command Get-NetAdapter | Format-Table Name,InterfaceDescription,InterfaceIndex,Status -AutoSize确认网络类型powershell -Command Get-NetConnectionProfile | Format-Table Name,InterfaceAlias,InterfaceIndex,NetworkCategory -AutoSize我们把 ZeroTier 网卡改成了 Privatepowershell -Command Set-NetConnectionProfile -InterfaceIndex 43 -NetworkCategory Private并添加了防火墙规则netsh advfirewall firewall add rule nameOpenSSH-ZeroTier-TCP22-Subnet dirin actionallow protocolTCP localport22 remoteip10.59.120.0/24 profileanypowershell -Command New-NetFirewallRule -DisplayName OpenSSH-ZT-Program-Subnet -Direction Inbound -Action Allow -Program C:\Windows\System32\OpenSSH\sshd.exe -Protocol TCP -LocalPort 22 -RemoteAddress 10.59.120.0/24 -Profile Any为了确认是否是 Windows 防火墙导致还短暂关闭过防火墙netsh advfirewall set allprofiles state off但本机访问 10.59.120.222:22 仍然超时。这说明问题不在 Windows 自带防火墙规则而更可能是第三方安全软件、HIPS、EDR 或网卡过滤驱动。换端口验证为了排除 22 端口被特殊拦截我们把 OpenSSH 增加了一个新端口 2222。编辑C:\ProgramData\ssh\sshd_config添加Port 22 Port 2222重启服务sc stop sshd sc start sshd确认监听netstat -ano | findstr :2222结果TCP 0.0.0.0:2222 0.0.0.0:0 LISTENING TCP [::]:2222 [::]:0 LISTENING但本机连接ssh -p 2222 admin10.59.120.222仍然超时。这进一步说明不是 22 端口本身的问题而是实验室机对 ZeroTier 虚拟网卡的 TCP 入站有更底层的拦截。管理员公钥路径的坑Windows OpenSSH 有一个容易踩的坑。C:\ProgramData\ssh\sshd_config 里有这段Match Group administrators AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keysadmin 属于 Administrators 组时公钥不会读C:\Users\admin\.ssh\authorized_keys而是读C:\ProgramData\ssh\administrators_authorized_keys所以如果后续要配置免密登录公钥应该放到C:\ProgramData\ssh\administrators_authorized_keys并确保权限正确。推荐的标准接入流程下一次从零配置推荐按这个顺序走。第一步确认实验室机 SSH 正常sc query sshd netstat -ano | findstr :22 ssh admin127.0.0.0只要本机回环 SSH 能进就说明 sshd 没问题。第二步两台机器加入 ZeroTier安装 ZeroTier 后两台机器都执行C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat join 76fc96e498然后到 ZeroTier 网页后台授权两个节点。检查C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat listnetworks两台机器都应拿到 10.59.120.x/24 这样的地址。第三步确认网络互通在本机ping 10.59.120.22如果 ping 通说明 ZeroTier 网络层已经通。第四步放行 SSH 入站在实验室机管理员 cmdnetsh advfirewall firewall add rule nameOpenSSH-ZeroTier-TCP22-Subnet dirin actionallow protocolTCP localport22 remoteip10.59.120.0/24 profileanynetsh advfirewall firewall add rule nameOpenSSH-2222 dirin actionallow protocolTCP localport2222 profileany第五步如果 ping 通但 SSH 超时如果出现ping 通 ssh 超时 Windows 防火墙关闭后仍超时 22 和 2222 都超时基本可以判断为第三方安全软件或底层过滤驱动在拦截虚拟网卡入站 TCP。这时应检查tasklist | findstr /i hips security firewall defender endpoint edr也可以在任务管理器里查看是否存在主机防护、HIPS、EDR、安全管家、校园网安全客户端等进程。如果能临时关闭网络防护再测试ssh admin10.59.120.222最终结论这次排查可以总结成一句话实验室机 SSH 服务本身是正常的ZeroTier 也已经把两台机器连到了同一个虚拟网真正阻塞的是实验室机对 ZeroTier 虚拟网卡的 TCP 入站访问。所以后续最推荐的稳定方案是ZeroTier 负责组网 OpenSSH 负责远程命令行 实验室机安全软件需要明确放行 ZeroTier 网卡上的 TCP 22/2222如果实验室机安全策略无法放开入站 TCP备用方案是使用公网跳板机做反向 SSH 隧道但这需要一台可公网访问的服务器。没有公网服务器时ZeroTier 仍然是当前最接近长期可维护的方案。当前项目里的实际状态本次项目中训练已经不依赖远程 SSH 才能继续。实验室机上的新版 6 类训练已经启动E:\yolo26-kuangqu\ultralytics-main训练日志E:\yolo26-kuangqu\ultralytics-main\train_run.log当前命令python train_mining.py --config config\train_config_expanded6_clean_refresh_heqselect_v1_5090_m_strategyfirst.yaml train_run.log 21远程连接排障和训练可以分开处理训练先跑远程接入后续继续优化。这样不会因为网络问题耽误模型实验。