实验室显卡与本机远程连接复盘:直连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

最后在实验室机本机测试 SSH:

ssh admin@127.0.0.1

这一步能登录,说明 OpenSSH 服务、账号、密码都没有问题。后续外部连不上,重点怀疑网络路径、防火墙、安全软件或虚拟网卡入站策略。

直接 SSH 为什么不稳定

实验室机的内网地址 10.195.63.48 属于私有/校园内网地址。它能否被外部主机直接访问,取决于当时的路由、网关、防火墙和校园网策略。

我们观察到:

ping 10.195.63.48 超时 ssh admin@10.195.63.48 超时

但实验室机本地:

sshd 正常 22 端口监听正常 127.0.0.1 SSH 正常

所以结论是:

SSH 服务没坏,坏的是跨网访问路径。

这也是后面要引入虚拟组网或反向隧道的原因。

尝试过的方案

方案一:Tailscale

Tailscale 的思路是让两台机器加入同一个虚拟局域网,然后通过 100.x.x.x 地址互相访问。

但这次本机 Tailscale 出现了后端异常:

503 Service Unavailable: no backend

服务看起来在运行,但 CLI 和本地后端通信不稳定,tailscale ip -4、tailscale up 经常无输出或卡住。卸载重装后仍然没有稳定可用的图形界面和后端状态。所以这次没有继续采用 Tailscale。

方案二:Pinggy 临时隧道

Pinggy 可以不需要公网服务器,直接由实验室机主动创建一个临时公网 TCP 隧道。

实验室机上执行:

ssh -p 443 -o ServerAliveInterval=60 -o TCPKeepAlive=yes -R0:127.0.0.1:22 tcp@a.pinggy.io

成功后返回:

tcp://xxxxx.run.pinggy-free.link:39863

然后外部主机尝试:

ssh -p 39863 admin@xxxxx.run.pinggy-free.link

这条路能成功生成临时隧道,但实际 SSH 握手阶段不够稳定,出现过:

Connection timed out during banner exchange

所以它适合临时救急,不适合作为长期训练机接入方案。

方案三:ZeroTier

ZeroTier 是这次最接近成功的方案。我们创建了一个虚拟网络:

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: bytes=32 time=13ms TTL=57

但 SSH 仍然超时:

ssh admin@10.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 网卡改成了 Private:

powershell -Command "Set-NetConnectionProfile -InterfaceIndex 43 -NetworkCategory Private"

并添加了防火墙规则:

netsh advfirewall firewall add rule name="OpenSSH-ZeroTier-TCP22-Subnet" dir=in action=allow protocol=TCP localport=22 remoteip=10.59.120.0/24 profile=any

powershell -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 admin@10.59.120.222

仍然超时。这进一步说明:

不是 22 端口本身的问题,而是实验室机对 ZeroTier 虚拟网卡的 TCP 入站有更底层的拦截。

管理员公钥路径的坑

Windows OpenSSH 有一个容易踩的坑。

C:\ProgramData\ssh\sshd_config 里有这段:

Match Group administrators AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

admin 属于 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 admin@127.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 入站

在实验室机管理员 cmd:

netsh advfirewall firewall add rule name="OpenSSH-ZeroTier-TCP22-Subnet" dir=in action=allow protocol=TCP localport=22 remoteip=10.59.120.0/24 profile=any

netsh advfirewall firewall add rule name="OpenSSH-2222" dir=in action=allow protocol=TCP localport=2222 profile=any

第五步:如果 ping 通但 SSH 超时

如果出现:

ping 通 ssh 超时 Windows 防火墙关闭后仍超时 22 和 2222 都超时

基本可以判断为第三方安全软件或底层过滤驱动在拦截虚拟网卡入站 TCP。

这时应检查:

tasklist | findstr /i "hips security firewall defender endpoint edr"

也可以在任务管理器里查看是否存在主机防护、HIPS、EDR、安全管家、校园网安全客户端等进程。

如果能临时关闭网络防护,再测试:

ssh admin@10.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 2>&1

远程连接排障和训练可以分开处理:训练先跑,远程接入后续继续优化。这样不会因为网络问题耽误模型实验。

相关推荐
sbjdhjd1 小时前
企业级 Docker 镜像仓库建设与运维规范
linux·运维·docker·云原生·容器·eureka·开源
TEC_INO1 小时前
Linux_54:RV1126的VI模块讲解
linux·运维·人工智能
期待のcode1 小时前
Redis数据类型
运维·数据结构·redis
Tingjct1 小时前
Linux开发工具
linux·运维·服务器
xingyuzhisuan2 小时前
适合微调Llama 3 70B模型的最低GPU配置推荐
运维·人工智能·算法·llama·gpu算力
Harvy_没救了2 小时前
【网络运维】从开发到上线全流程简化方案
运维·网络
idolao2 小时前
AutoTiny_5.0.0.1_win_x64自动化操作安装步骤详解(附AutoTiny自动化脚本与录制教程)
运维·自动化
精益数智工坊2 小时前
拆解设备维护管理系统的工单功能,解决设备维护管理派单慢难题
大数据·运维·网络·人工智能·精益工程
江湖有缘2 小时前
使用Docker部署Docker Compose文件管理工具Dockge
运维·docker·容器