保姆级教程:把家里的台式机变成深度学习“云算力”(基于 ZeroTier 与 SSH 隧道实践)
绝对禁止算力端系统睡眠或挂起。操作系统默认会在一段时间不操作后进入“睡眠挂起”状态。一旦睡眠挂起,网卡断电,SSH 瞬间断开,所有正在训练的程序直接被冻结或杀死。算力端如果是Windows系统:在台式机上打开设置->系统->电源和睡眠。将“屏幕”设置为“从不”或“10分钟”(关闭屏幕没关系,不影响 GPU 运算)。将“睡眠”务必设置为“从不”。算力端是Linux系统:为了彻底防止 Linux 桌面
【技术架构摘要】
本教程旨在解决异构系统下深度学习算力调用的痛点。目前本人已将本文的核心环境配置过程(包括 Linux 端与 Windows 端)封装成了自动化一键部署脚本 并开源至 Github。
详情见https://github.com/nbplus12345/Remote_Cloud_Compute
核心架构:
-
底层链路:ZeroTier SD-WAN 虚拟局域网(解决公网 NAT 穿透)。
-
远程服务:VS Code Server Client-Server 架构 + SSH 隧道加密通信。
-
高可用性:IoT 硬件联动(智能插座触发主板 AC Recovery)+ tmux Linux 进程守护。
通过这套架构,本人实现了 Windows / Linux 双端算力的零成本、低延迟远程调用,彻底摆脱了实验室环境限制。
0. 引言:为什么你需要一台“私人云算力”?
作为一名计算机视觉(CV)方向的研一学生,深度学习对算力的极高要求,注定了我们不可避免地需要一台高配台式机来跑代码。按照往届实验室的惯例,大家通常会把笨重的台式机直接搬到工位上。但这带来了一系列让人头疼的痛点:
- 移动极其折腾:寒暑假或者换工位时,搬运主机简直是体力活。
- 生活与科研难平衡:高配电脑全天候放在实验室,晚上回宿舍想打个游戏、或者临时有个灵感想要跑个测试,手头的轻薄本根本无能为力。
于是我开始构想:能不能把高配台式机安稳地放在宿舍(白天当服务器“炼丹”,晚上做游戏主机),平时去工位或出差,只带一台轻薄的办公本,随时随地远程连接这台算力怪兽?
经过几天的踩坑与折腾,我终于跑通了这套堪称完美的远程工作流。故写下这篇文章,希望能帮到有同样需求的炼丹师们。
- 适用人群:不想把台式机搬到工位/公司的研究生或打工人;频繁出差、身边只有轻薄本的开发者;想省下昂贵云服务器租用费的 AI 玩家。
- 本文特色:市面上的教程往往只针对单一环境,本文将提供全覆盖的双平台指南——包括 Windows + N 卡和 Linux + A 卡
1. 物理底座:实现“指尖开机”的黑科技
既然要把台式机留在家里当服务器,我们要解决的第一个痛点就是:人不在家,电脑关机了怎么启动?(当然如果你不需要远程启动或者是校园网可以直接跳过该章节)
很多教程会教你搞局域网唤醒(WOL),但是它配置极其繁琐,且跨公网唤醒的成功率极其感人。同是作为小白,我强烈推荐这套只需几十块钱、且成功率 100% 的“物理唤醒法”。
1.1 硬件准备:智能插座
在企业级服务器中,这类硬件级远程控制通常由带外管理模块(如 IPMI / BMC)完成,而个人的低成本平替方案则是利用 AC Recovery。
去网购平台随便买一个支持手机 APP 控制的智能插座(比如米家、向日葵、公牛等,普通款几十块钱即可,不需要买带高级功能的,像我买的还可以监控用电量,帮我算跑模型花了多少电费)。 把这个智能插座插在插排上,然后把你台式机电源的插头,插在这个智能插座上。在手机上下载插座对应的 APP,然后设置插座连接 WIFI 就行,只要 WIFI 不断,手机就能随时控制插座开关。(目前校园网环境我还没有配置过,感兴趣可以自行研究)
1.2 开启主板的“来电自启”
智能插座只能控制通断电,我们为了让电脑一通电就自动开机,就需要动用主板 BIOS 设定:
-
进入 BIOS:重启电脑,狂按键盘上的
Del键或F2键(不同主板可能不同)进入 BIOS 界面。 -
寻找电源管理选项:在高级设置(Advanced)里,找到类似
Power Management或APM Configuration的菜单。 -
开启来电恢复:找到名为
Restore on AC Power Loss(或者叫AC Recovery、断电恢复后电源状态)的选项。 -
将它的值从
Power Off修改为Power On。 -
按
F10保存并退出。
这个功能原本是给服务器用的,防止机房停电后没人按开机键。现在我们用智能插座“模拟”了停电和来电的过程:当你用手机 APP 把智能插座打开,主板瞬间检测到“来电”信号,就会自动触发开机指令。
1.3 设置系统开机“自动免密登录”
当我们用智能插座远程点亮电脑后,系统默认会卡在锁屏输入密码的界面。虽然这不影响底层 SSH 服务的运行,但为了确保所有用户级的自启软件(如同步盘、特定的 GPU 监控面板)都能正常加载,强烈建议将算力端设置为通电后自动免密进入桌面。
👉 路线 A:Windows 算力端
由于微软的安全机制,现在的 Windows 隐藏了自动登录的选项,我们需要分两步把它找出来并开启:
-
关闭 Windows Hello 限制:打开 Windows 的
设置->账户->登录选项。在中间找到 “为了提高安全性,仅允许对此设备上的 Microsoft 帐户使用 Windows Hello 登录”,将这个开关关闭。(如果没有这个选项可以直接跳过)。 -
配置自动登录:
-
按下键盘上的
Win + R键呼出运行窗口,输入netplwiz并回车,打开“用户账户”界面。 -
在列表中选中你平时登录的用户名。
-
取消勾选最上方的那句:“要使用本计算机,用户必须输入用户名和密码”。
-
点击右下角的“应用”。此时会弹出一个窗口让你输入当前的开机密码。连续输入两次确认后,点击确定即可。下次插座一通电,Windows 就会一路绿灯直达桌面!
-
👉 路线 B:Linux 算力端(以 Ubuntu 图形界面为例)
Ubuntu 的设置极其简单,完全不需要敲代码:
-
打开 Ubuntu 的
设置 (Settings)。 -
在左侧边栏最下方找到
用户 (Users)。 -
点击右上角的
解锁 (Unlock)按钮,输入你当前的开机密码获取管理员权限。 -
将
自动登录 (Automatic Login)的开关打开即可。
💡 安全提示:开启系统自动登录后,意味着任何人只要按下你这台台式机的电源键,就能直接进入你的电脑。因此本操作仅适用于放在宿舍、家里等具备物理安全保障的私人设备。如果你的台式机放在人来人往的公共实验室,请勿开启此功能,卡在锁屏界面即可,不影响后续的 SSH 远程敲代码。
1.4 正确的日常开关机姿势
配置好之后,你以后的远程开关机流程应该是这样的:
-
正确的远程关机:在你远程用完电脑后,先在 Windows/Linux 系统内部正常点击“关机”或者输入
shutdown命令。 -
绝对禁止的操作:千万不要在电脑还在运行的时候,直接用手机关闭插座!这相当于直接拔电源,极大概率会损坏你的系统文件甚至硬盘!
-
如何远程开机:下次需要用算力时,直接用手机 APP 打开智能插座通电。
-
当然算力端台式机日常使用我们也可以正常按关机键关机,下次需要远程启动的时候,直接在手机上把插座关了,等五秒再打开就行(等几秒是为了让主板识别到断电)。
2. 网络桥梁:ZeroTier 虚拟局域网搭建
为什么不直接用向日葵或 ToDesk?因为这类远控软件的免费版通常会限速,而且连接的延迟十分恶心,且在跑深度学习代码时,我们需要的是底层的 SSH 终端连接,而不是看图形界面。但我们人在外面(用的是校园网或星巴克 Wi-Fi),家里的电脑连的是家用宽带,没有公网 IP,这两台机器在物理上是“失联”的。而 ZeroTier 能为我们的设备分配一个固定的“虚拟局域网 IP”,凭空拉一根“虚拟网线”,把它们硬生生拽进同一个局域网里。
2.1 注册并创建你的“虚拟网吧”
-
访问 ZeroTier 官网,注册一个账号并登录。
-
创建一个新的组织,名称任意。此时会弹出页面让我们氪金,对于个人用免费版就行,包含一个局域网内的10个设备。
-
此时页面中就出现我们的新网络了,记住那个 16 位的字母数字组合——这就是你的 Network ID(相当于你的网吧通行证)。
![![[Pasted image 20260501103825.png]]](https://i-blog.csdnimg.cn/direct/d067a6ec48eb4bb388dafb58d3b5e1c4.png)
2.2 控制端(笔记本)加入网络
现在我们需要连接我们的第一个设备,推荐先连接笔记本,作为你随身携带的“遥控器”,这步最简单:
-
在笔记本上下载 ZeroTier 的 Windows 客户端并安装。
-
运行后,在电脑右下角任务栏找到 ZeroTier 图标,右键选择 “Join Network”。
-
输入刚才的 16 位 Network ID,点击 Join。
-
或者我们也可以通过命令行加入 (最快),用管理员身份打开终端,输入以下内容并回车(将
你的网络ID替换为实际数字):
zerotier-cli join 你的网络ID
如果显示 200 join OK,说明请求发送成功。
- 只要有新设备 Join,你必须回到 ZeroTier 网页端后台,在下面的 “Member Devices” 列表中找到这台新设备,在后面点击 Actions 下面的三个点,点击弹出来的 Authorize 。授权后,系统才会给它分配一个
Managed IPs(比如10.147.x.x),这个 IP 就是以后我们远程连接的专属地址!![![[Pasted image 20260501105752.png]]](https://i-blog.csdnimg.cn/direct/9e4ddb115634414185fd53059b098667.png)
2.3 算力端(家里台式机)加入网络
这里请根据你家里台式机的系统“对号入座”:
👉 路线 A:Windows 算力端
操作和笔记本一模一样:下载客户端(或者用命令行) -> 右键 Join Network -> 填入 Network ID -> 去网页后台打勾授权。
👉 路线 B:Linux 算力端
我们只需要在终端按顺序执行以下三步:
# 1. 检查系统基础工具
sudo apt update && sudo apt install curl -y
# 2. 运行官方一键安装脚本
curl -s https://install.zerotier.com | sudo bash
# 3. 成功安装后,加入你的网络(请把下面这串换成你自己的 Network ID)
sudo zerotier-cli join 88c5b1fxxxxxxxxx
执行完毕后,同样别忘了去 ZeroTier 网页后台给这台 Linux 机器打勾授权,拿到它的专属 IP。
2.4 测试“握手”是否成功
到这里,笔记本和台式机都已经加入了同一个 ZeroTier 网络,并拿到了虚拟 IP。 我们在笔记本(控制端)上打开 CMD 命令提示符,输入: ping [台式机刚分配到的 ZeroTier 虚拟 IP]
如果屏幕上开始持续弹出 Reply from ... time=xx ms 的字样,恭喜你!这两台相隔千里的电脑,已经在赛博空间里成功握手了。
当你开启 ZeroTier 又同时启动 VPN 服务的时候,千万不能将 VPN 设置成为 全局模式 (Global),尽量使用“规则模式 (Rule)”或“自动代理”,否则极大概率 ZeroTier 会断连。
或者在你 VPN 的设置里,找到“Bypass (绕过局域网)”选项,确保勾选。或者手动将 ZeroTier 分配给你的网段(例如10.147.17.0/24)加入直连/不走代理的白名单中。
3. 远程开发:VS Code 丝滑连接与“断网神器”
现在两台电脑已经处于同一个 ZeroTier 虚拟局域网中了。为了让外出的笔记本能够像操作本地一样控制家里的台式机,我们需要通过 SSH 建立连接。SSH(Secure Shell 安全外壳协议) 是一种网络通信协议,旨在提供安全的数据传输方式。它通过加密技术保护数据的机密性和完整性,广泛用于远程登录和其他网络安全应用。而 VS Code 也有对应的 Remote - SSH 插件。
核心逻辑:客户端 - 服务器(Client-Server)架构
我们可能习惯了“同步”的概念(比如把本地代码同步到远程)。VS Code 的 Remote - SSH 插件采用的是完全不同的逻辑:远程宿主模式。当你通过 VS Code 连接到台式机时,发生的事情如下:
- VS Code Server:VS Code 会自动在你的台式机上安装一个轻量级的“后端服务”(VS Code Server)。
- UI 分离:你笔记本上的 VS Code 此时只负责显示界面(渲染文字、响应点击)。
- 逻辑运行:所有的插件逻辑(如代码分析 Pylance)、文件索引、代码运行、调试过程,全部都在台式机的那个后端服务中完成。
简单来说:你的笔记本只是台式机的一面“镜子”或者一个“高级显示器”。
整体逻辑是:先在台式机(算力端)上启动 SSH 服务,然后在笔记本(控制端)上用 VS Code 进行连接。
3.1 算力端(台式机)开启 SSH 服务
请根据你台式机的操作系统,进行对应的操作:
👉 路线 A:Windows 算力端(开启 OpenSSH)
Windows 系统默认是没有开启 SSH 服务端的,我们需要手动安装:
-
打开 Windows 设置 -> 系统 -> 可选功能。
-
点击“查看功能”,在搜索框输入
OpenSSH 服务器。![![[Pasted image 20260501112803.png]]](https://i-blog.csdnimg.cn/direct/1fa4035431f4473098d0633a97e577ea.png)
-
勾选并点击下一步,点击"添加"来安装(注意是“服务器”,不是“客户端”)。如果下载卡顿,参照最后的常见问题解决。
-
安装完成后,以管理员身份打开终端,输入以下两行命令,启动服务并设置开机自启:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
👉 路线 B:Linux 算力端
Ubuntu 等 Linux 系统通常自带 SSH 服务,但为了保险起见,我们在终端执行以下命令,确保它已安装并随系统自启:
sudo apt update
sudo apt install openssh-server -y
sudo systemctl enable ssh
sudo systemctl start ssh
3.2 控制端(笔记本)VS Code 基础连接
台式机的“门”已经打开,现在我们在笔记本上配置“钥匙”:
-
安装插件:在笔记本打开 VS Code,在左侧扩展商店搜索并安装
Remote - SSH插件(微软官方出品)。 -
配置连接文件:
-
按快捷键
Ctrl + Shift + P调出命令面板。 -
输入并选择
Remote-SSH: Open SSH Configuration File...。 -
选择带有你用户名的路径(通常是
C:\Users\你的用户名\.ssh\config)。
-
-
写入台式机信息:在打开的 config 文件末尾,追加以下代码并保存(替换括号里的内容):
Host My-SSH-Server
HostName [填入算力端在 ZeroTier 里分配的虚拟 IP]
User [填入算力端的用户名]
注意这个用户名不一定是微软账号或者Linux开机显示的用户名。
Win端是C:\Users\目录下的用户文件夹名,比如我的是C:\Users\18561\Desktop,那么用户名就是18561。
Linux端是算力端终端输入 whoami 命令后输出的名字。
同时注意里面千万不要放password xxxxx的明文密码,会报错“管道不存在”。
- 发起连接:点击 VS Code 左下角绿色的
><图标,选择 Connect to Host… -> My-SSH-Server。首次连接会在上面弹出栏让你选择操作系统(Windows/Linux)并确认指纹,最后输入台式机的开机密码(注意Win端的不是PIN码而是开机密码,当时卡在这个问题上白忙了一天),待算力端下载完 VS Code服务器 即可成功连入!(如果下载到一半卡住了参考最后的常见问题解决)
现在我们在笔记本 VS Code 左边的项目栏中点击打开文件夹,上面选择的目录就是算力端的目录,可以直接通过笔记本访问算力端台式机的文件
3.3 控制端(笔记本)VS Code 终端与插件安装
现在你已经成功进入了算力端的内部,左侧的文件树就是你台式机里的文件。但在正式开始写代码跑实验之前,请先进行终端和插件的检查安装:
- 呼出远端终端(跑指令必备):我们可以在控制端的任何终端中(包括 Anaconda Prompt )使用如下命令来远程连接算力端。
ssh [算力端用户名]@[分配给算力端的虚拟ip]
这里推荐直接使用 VS Code 的自带终端,在 VS Code 顶部菜单栏点击 “终端 (Terminal)” -> “新建终端 (New Terminal)”(或者按快捷键
Ctrl + ~)。 此时下方会弹出一个命令行窗口,仔细看它的提示符,已经变成了你台式机的用户名。
-
从现在开始,我们在这里敲下的每一行命令(比如
conda activate env或python train.py),都是在算力端执行,消耗的都是那台台式机的 CPU 和显卡算力。 -
安装远端插件:VS Code 的插件是分“本地”和“远端”的! 即使你轻薄本上的 VS Code 已经装了 Python 插件,在连上台式机后依然是失效的。你需要点击左侧的“扩展”图标(四个方块),此时你会发现列表被清晰地分成了两栏:“本地 - 已安装” 和 “SSH: My-Server - 已安装”。 请在搜索框里搜索
Python和Jupyter等插件,然后点击 “在 SSH: My-SSH-Server 中安装”。装好后,你才能在 VS Code 的远程开发中使用这些插件。![![[Pasted image 20260502101827.png]]](https://i-blog.csdnimg.cn/direct/a8b1dc5493aa4d319ab28e6d1de1973f.png)
3.4 第四步:最后检查各项设置
- 绝对禁止算力端系统睡眠或挂起。
操作系统默认会在一段时间不操作后进入“睡眠挂起”状态。一旦睡眠挂起,网卡断电,SSH 瞬间断开,所有正在训练的程序直接被冻结或杀死。- 算力端如果是 Windows 系统:在台式机上打开
设置->系统->电源和睡眠。将“屏幕”设置为“从不”或“10分钟”(关闭屏幕没关系,不影响 GPU 运算)。将“睡眠”务必设置为“从不”。 - 算力端是 Linux 系统:为了彻底防止 Linux 桌面环境或内核进入休眠状态,建议直接通过
systemctl屏蔽相关的电源管理目标。在算力端的终端中执行以下命令:
- 算力端如果是 Windows 系统:在台式机上打开
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
(如果要恢复休眠功能,将上述命令中的 mask 改为 unmask 即可。)
- 暂停 Windows 自动更新 (Linux 跳过)
Windows 最让人崩溃的一点就是它喜欢在半夜偷偷帮你更新,然后强制重启电脑。这会直接摧毁你跑了几天几夜的模型。咱们最好关掉自动更新。
- 在台式机打开
设置->更新和安全->Windows 更新。点击“暂停更新 7 天”(你可以一直点,最多暂停 35 天)。如果你准备跑一个超大模型,跑之前一定要先把更新暂停掉。
- 强烈建议配置一下远程桌面,详情见 4.4 。
如果算力端是 Linux 系统,我们要想使用远程桌面服务,千万不要把显示器关掉。除非配置虚拟驱动或者使用
xrdp,不然一旦关了显示器,显卡侦测不到 EDID 信号,就会停止渲染,从而无法使用远程桌面。
4. 进阶设置: 打造完美的远程炼丹体验(可选)
掌握了前面的基础操作,你已经具备了远程写代码和跑实验的能力。但为了追求极致的开发体验,强烈建议你花几分钟把下面这些“炼丹神技”也配置上。
4.1 一劳永逸:配置私钥免密登录
每次连接 VS Code 都要手动敲密码,特别是有时候网络波动重连,频繁输密码非常反人类。我们可以给两台电脑配置一把“数字钥匙(公私钥对)”,实现每次打开 VS Code 都能一秒免密直连。
1. 在笔记本(控制端)生成钥匙
打开笔记本的 CMD 命令提示符,输入:
ssh-keygen -t rsa
一路疯狂按回车,直到出现一个由字符画成的方块图案。此时你的笔记本已经生成了密钥对。
打开文件路径 C:\Users\你的用户名\.ssh\id_rsa.pub,用记事本打开它,复制里面的一长串字符(这就是你的公钥)。
2. 把公钥放进台式机(算力端)的白名单
-
如果台式机是 Windows: 在台式机的
C:\Users\台式机用户名\.ssh\目录下,新建一个名为authorized_keys的无后缀文件。把刚才复制的一长串公钥字符粘贴进去并保存。 -
如果台式机是 Linux: 在 VS Code 底部的终端里,输入以下命令创建白名单文件:
mkdir -p ~/.ssh
touch ~/.ssh/authorized_keys
用 VS Code 远程打开这个文件,粘贴那串公钥字符并保存。
⚠️ Linux 专属关键步骤:必须修改权限,否则免密失效! 在终端再补上一句:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
3. 强制关闭密码登录 在算力端(以 Linux 为例)修改 /etc/ssh/sshd_config 文件,将 PasswordAuthentication yes 改为 PasswordAuthentication no,然后重启 SSH 服务。这样即使别人拿到了你的 IP 和密码,没有私钥也绝对进不去。
4.2 炼丹仪表盘:用 nvitop 充当远程任务管理器
每次跑模型,大家最关心的就是“显存爆没爆”、“GPU吃满了没”。你可能知道用 nvidia-smi,但那个界面太简陋了。这里强烈推荐一款超高颜值的显卡监控神器:nvitop。
在 VS Code 的远端终端里,直接用 pip 安装(注意在你跑模型的 Python 虚拟环境里安装):
pip install nvitop
装好后,每次跑代码时,开一个新的终端,进入对应环境,输入:
nvitop
你会看到一个极其精美、实时刷新的彩色仪表盘!它不仅能实时显示显存占用率、GPU 温度、风扇转速,还能清晰地列出到底是哪个进程(甚至具体到哪位用户的哪个 Python 脚本)在消耗你的算力,排查显存泄漏的神兵利器。![![[Pasted image 20260502102137.png]]](https://i-blog.csdnimg.cn/direct/586b36ee75604fc3b757a8044f5370d6.png)
(如果是 A 卡 Linux 用户,也可以使用 AMD 官方自带的 rocm-smi 查看状态。)
4.3 防断网神器:使用 tmux 守护后台训练 (针对 Linux)
痛点场景:如果你在普通的 VS Code 终端里直接输入 python train.py,一旦你的笔记本断网、休眠或者合上盖子,SSH 连接就会断开,你的训练进程大概率会被直接杀死(因为终端会话结束了)。
👉 路线 A:Windows 算力端
一般我们是只能自认倒霉,或者有个妥协的方法,就是将输出重定向。在 VS Code 的 PowerShell 终端里,用以下命令启动训练:
Start-Process -NoNewWindow -FilePath "python" -ArgumentList "train.py" -RedirectStandardOutput "training_log.txt" -RedirectStandardError "error_log.txt"
- 原理:
Start-Process会向 Windows 申请启动一个独立的进程,它不再是你当前 SSH 会话的直接子进程。 - 效果:即使你马上关掉 VS Code 或断网,训练依然会在后台进行,输出的日志会被写进
training_log.txt文件里。 - 缺点:你看不见实时的终端输出了,只能通过不断打开
training_log.txt来查看进度,或者我们可以用 TensorBoard 或者 Weights & Biases (W&B);而如果想强行终止训练,你需要打开任务管理器去杀 Python 进程。 - 残酷的真相是:在原生且不装第三方复杂插件的情况下,想要随时剥离会话、关机走人、随时挂载恢复、实时看输出的完美终端复用体验,几乎是 Linux 系统的专属超能力。
👉 路线 B:Linux 算力端
我们可以使用 tmux 终端复用器(Linux独享)
-
新建守护窗口:在运行训练代码前,先在终端输入
tmux new -s train,你会进入一个底部有绿条的新环境。 -
正常跑代码:在这个环境里运行你的
python train.py。 -
安全退出(挂起):按下键盘上的
Ctrl+B,松开后,再按一下D(Detach)。此时你会退回到普通终端,但你的训练任务已经在后台被稳稳守护住了。 -
随时重连:即使你笔记本断网、关机,几天后你到了酒店重新连上 VS Code,只需在终端输入
tmux attach -t train,刚才跑着代码的画面就会原封不动地回到你的屏幕上!
4.4 “救命复活甲”:配置远程桌面服务(强烈推荐)
绝大多数时候,VS Code 已经能解决 99% 的写代码需求(即使要看图片,也可以直接在 VS Code 左侧文件树里双击打开浏览)。但如果 ZeroTier 挂掉了或者 SSH服务 出现了问题。这时候,你在 SSH 里什么都看不见,只会一直提示 Connection timed out ,如果你只有 SSH,你的台式机就彻底失联了,你只能给室友或者房东打电话求他们去帮你重启电脑。而远程桌面就是你的 “备用钥匙” 和 “上帝视角” 。我们可以直接下载第三方远程软件如 ToDesk 或者 向日葵 ,也可以利用搭好的 ZeroTier 虚拟局域网,彻底告别免费版 ToDesk/向日葵的限速和画质压缩!
如果你是新版的 Ubuntu 系统并且第三方远程桌面程序 ,而且远程连接后出现了笔记本看是黑屏但是鼠标却能同步移动的现象,说明是 Wayland 渲染协议 冲突。新版 Ubuntu 默认使用 Wayland 作为显示服务器协议,为了安全,Wayland 严格限制了进程间的通信。第三方远程桌面程序默认是没有权限直接“窥视”整个桌面内容的。如果你必须依赖特定的第三方工具,那么在 Ubuntu 登录界面右下角点击小齿轮,选择 “Ubuntu on Xorg” 登录,是最简单粗暴的解决办法。
👉 路线 A:Windows 算力端(系统原生 RDP,极致丝滑)
-
算力端开启服务:在台式机(必须是 Windows 专业版)上,打开 设置 -> 系统 -> 远程桌面,将其启用。
-
控制端直连:在你的轻薄本上,按
Win + S搜索并打开系统自带的“远程桌面连接”。 -
在计算机名一栏,直接填入台式机的 ZeroTier 虚拟 IP。
-
点击连接,输入台式机的开机密码。因为走的是局域网直连,画质和流畅度几乎等同于坐在台式机前操作!
👉 路线 B:Linux 算力端(以 Ubuntu 24.04.4 LTS 原生 RDP 为例)
自 Ubuntu 22.04 起,系统已经把底层协议从 VNC 全面升级成了 原生 RDP (GNOME Remote Desktop) ,自带的远程桌面也已经升级。这意味着我们完全不需要敲命令行装
xrdp,直接用图形界面点几下,就能实现和 Windows 一样丝滑的远程连接。
-
算力端开启服务:在 Ubuntu 桌面点击右上角的快捷菜单,打开 “设置 (Settings)” -> 左侧侧边栏找到 “系统 (System)” -> 点击 “远程桌面 (Remote Desktop)”。
-
启用与配置:
-
将顶部的开关打开。
-
勾选启用 “桌面共享 (Desktop Sharing)”(允许远程看到当前画面)。
-
在下方的 “登录详细信息 (Login Details)” 中,设置一个专门用于远程连接的用户名和密码(建议设置得简单好记一点,它独立于你的 Ubuntu 开机密码)。
-
-
控制端直连:回到你的轻薄本,按
Win + S搜索打开 Windows 系统自带的 “远程桌面连接”。输入 Linux 算力端在 ZeroTier 中的虚拟 IP,点击连接。 -
输入凭据:在弹出的凭据框中,选择更多选项,使用其他账户,输入你刚刚在 Ubuntu 里设置的远程账号和密码(不是用你的微软账户登录),即可瞬间进入高画质的 Linux 图形桌面。
![![[Pasted image 20260502095405.png]]](https://i-blog.csdnimg.cn/direct/44fe1178af25461ca83d874226add1ac.png)
-
设置免密连接,在 Windows 的远程桌面连接中,选择显示选项,点击允许我保存凭据,在用户名中输入 Linux 设置的用户名,在弹出的凭据框中输入密码,点击记住我的凭据。连接成功后下次连接即可免密连接。
5.常见问题
两端数据怎么传输?
如果是一两行简短文本可以直接复制粘贴。如果需要传文件或者图片,向算力端传输可以直接拖进 VS Code 左边的项目目录里面,从算力端下载可以在目录里对准想要下载的文件右键,选择 下载 ,选择下载到的路径即可。
如果需要从 github 上更新代码,直接在 VS Code 上选择更新即可。
如果需要下载大型数据集,建议使用命令行工具下载或用远程桌面操作下载。
无法与 SSH 服务器建立连接 / 连接超时
遇到 SSH 连不上,我们要采用自底向上的排查逻辑:先看网络层(ZeroTier 连通性),再看传输层/应用层(防火墙与 sshd 服务)。
第一步:【网络层排查】—— 到底连没连上? 先在控制端(笔记本)终端输入 ping [算力端的虚拟IP]。
- 如果能 ping 通:说明 ZeroTier 组网完美,底层网络没问题,直接跳到第三步。
- 如果 ping 不通:说明 ZeroTier 掉线或被阻断。检查算力端右下角的 ZeroTier 状态是否为
OK。回想一下自己是不是刚连了 VPN 且开了“全局代理”导致流量被拦截。尝试用第三方远程桌面去算力端重启 ZeroTier 。Windows 按Win + R键,输入services.msc打开服务管理器。找到zerotier one,如果没运行就点击“启动”;如果正在运行就右键点击“重新启动”。Linux 在终端执行:
sudo systemctl restart zerotier-one
第二步:【物理层/系统层排查】—— 电脑还活着吗? 如果 ping 不通,且尝试用 ToDesk 等第三方远程桌面也连不上:
- 大概率是算力端休眠断网了、家里停电了,或者系统死机重启卡在了 BIOS 界面。
- 结论:系统级失联,只能请室友或房东去面对面物理排查。
第三步:【传输层排查】—— 22 端口被防火墙“墙”了吗? 如果第一步能 ping 通,说明两台电脑已经握手,但 VS Code 就是连不上。这 100% 是算力端的 Windows Defender 防火墙拦截了 SSH 的默认 22 端口。
- 解决办法:通过远程桌面连入算力端,以“管理员身份”打开 PowerShell,输入以下命令。它的作用是在防火墙上强行“开个洞”,放行外部 TCP 22 端口:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
第四步:【应用层排查】—— SSH 服务崩了吗?
如果防火墙放行了还是不行,那就是应用层的服务端程序自己意外退出了。
- 解决办法:在算力端按
Win + R键,输入services.msc打开服务管理器。找到OpenSSH SSH Server,如果没运行就点击“启动”;如果正在运行就右键点击“重新启动”。
Windows系统里 SSH 服务器下载慢 / 卡死
尝试使用命令行安装
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
大概率命令行也会卡死,因为不管是图形界面的“可选功能”,还是 Add-WindowsCapability 命令,它们底层都要去调用 Windows Update 联网下载。现在更新被暂停了,它实际上并没有下载成功,只是假装执行了一下。我们直接手动下载:
第一步:下载绿色版 OpenSSH 包
- 在台式机的浏览器里,打开微软 OpenSSH 的官方 GitHub 发布页: 👉 https://github.com/PowerShell/Win32-OpenSSH/releases
- 找到最新的版本(比如
v9.5.0.0p1-Beta或更高),在下面的 Assets 列表里,点击下载OpenSSH-Win64.zip。
第二步:解压并放置到指定位置
- 下载好之后,右键解压这个
.zip压缩包。 - 你会得到一个名为
OpenSSH-Win64的文件夹。 - 把这个文件夹,直接剪切/移动到你的 C 盘
Program Files目录下。- 现在的绝对路径应该是:
C:\Program Files\OpenSSH-Win64
- 现在的绝对路径应该是:
第三步:一键运行注册脚本
这个文件夹里微软已经为你准备好了安装脚本。
- 点击左下角开始菜单,搜索
PowerShell,右键选择“以管理员身份运行”。 - 在黑框框里输入以下命令,进入你刚才放文件的目录并回车:
cd "C:\Program Files\OpenSSH-Win64"
- 接着,输入并执行这个微软写好的安装脚本:
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
(你会看到屏幕上一闪而过几行绿字,提示 sshd 和 ssh-agent 服务安装成功。)
第四步:启动服务
现在直接敲入启动命令:
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
正在下载 VS Code 服务器下载慢 / 卡住
由于微软的下载服务器在国内经常抽风,或者因为 ZeroTier 传输大文件时出现拥塞,这个进度条就会陷入“无限卡死”的状态,我们直接手动离线安装。
第一步:获取你当前 VS Code 的 Commit ID
服务器端和电脑端的 VS Code 版本必须严丝合缝,所以我们需要你的版本号:
- 在 Windows 笔记本上打开 VS Code。
- 点击顶部菜单栏的 “帮助” (Help) -> “关于” (About)。
- 在弹出的窗口里,找到 提交 (Commit) 那一行,后面跟着一串很长的字母+数字(比如
e170252f762678dec6ca2cc69aba1570769a5d39)。 - 把这串代码复制下来。
第二步:用浏览器手动下载
- 复制下面这个链接,把里面的
[你的Commit ID]替换成你刚刚复制的那串代码:
https://update.code.visualstudio.com/commit:[你的Commit ID]/server-linux-x64/stable
- 把替换好的链接粘贴到浏览器地址栏,回车。它会下载一个名为
vscode-server-linux-x64.tar.gz的压缩包(大概 40-50MB)。
第三步:手动放入 Linux 里
现在要把这个文件送进 Linux,并放在指定的文件夹。你可以用 ToDesk 把这个压缩包传到 Linux 的“下载”或桌面文件夹,然后打开 Linux 的终端操作:
- 先清理之前卡死产生的垃圾文件:
rm -rf ~/.vscode-server
- 创建特定的存放目录:
mkdir -p ~/.vscode-server/bin/[你的Commit ID]
- 解压你传过来的那个文件到指定目录(假设你传到了 ~/Downloads 目录下,如果不是请改路径):
tar -zxf ~/Downloads/vscode-server-linux-x64.tar.gz -C ~/.vscode-server/bin/[你的Commit ID] --strip-components 1
- 告诉 VS Code 别下了:
touch ~/.vscode-server/bin/[你的Commit ID]/0
(注意:最后这个 0 是个文件,代表安装完成的标志。这步绝不能漏!)
5. 做完上面所有步骤,我们就进行最后的确认。在终端里敲这一行命令:
ls -la ~/.vscode-server/bin/034f571df509819cc10b0c8129f66ef77a542f0e
如果你看到一大堆文件(比如 bin, components, node 等文件夹),看到列表里有一个只有 0 字节大小、名叫 0 的文件,就成功了。
(Windows端)VS Code 终端无法使用 conda 命令
当你在笔记本上通过 VS Code (SSH) 连入算力端时,VS Code 会在算力端后台悄悄打开一个普通的 PowerShell。由于算力端的 Windows 系统环境里没有记录 Conda 的环境变量,PowerShell 找不到 conda.exe 这个文件,自然就报错了。VS Code 的 Python 插件也就变成了“瞎子”,无法帮你自动扫描和切换虚拟环境。我们可以使用 Anaconda Prompt 自动注入。
- 笔记本打开 Anaconda Prompt ,使用
ssh 用户名@虚拟ip命令连接算力端 - 进入后输入以下命令并回车
conda init powershell
conda init cmd.exe
- 命令运行后,你会看到屏幕上刷出几行带有
modified或no change的提示。这说明 Conda 已经成功把自己的路径刻进了系统的启动脚本里。重新在 VS Code 打开一个终端,输入conda --version。如果这次输出了版本号(比如conda 23.7.4),说明配置完美成功!
算力端启动后进入bios界面而进不去系统
通常电脑自动跳进 BIOS 是因为非法关机(比如断电)导致的主板设置报错,或者主板电池(CMOS)没电了导致配置丢失。只要没进引导程序,系统层面的所有设置(SSH、ZeroTier)全是摆设,我们只能面对面手动退出并重启。但建议我们提前在 BIOS 里改一个设置,防止以后重演:
- 忽略错误启动: 在 BIOS 的
Boot选项里,找到类似Wait For 'F1' If Error的选项,把它设为 Disabled。这样即使主板觉得有点小异常,也会尝试继续启动进入系统,而不是停在那等你按键。
(Linux端)显卡驱动装好了,PyTorch 却说找不到显卡
现象:跑 torch.cuda.is_available() 依然返回 False。
排错思路(OS 权限控制):这是典型的 Linux 权限隔离问题。普通用户默认没有访问底层硬件设备(GPU 显存)的权限。
解决办法:在 Linux 终端执行以下命令,将当前用户加入 video 和 render 高级权限组:
sudo usermod -aG video $USER
sudo usermod -aG render $USER
(注意:修改用户组后,必须重启算力端机器才能生效!)
6. 结语
从几十块钱的智能插座,到 ZeroTier 跨越千里的虚拟网线,再到 VS Code 丝滑的远程体验与 tmux 的断网守护。至此,一台零成本、不限速、双系统通吃的私人云算力工作站,就已经完美搭建完毕了。
现在,你可以放心地把那台笨重、充满噪音、发热量巨大的台式机安放在宿舍或家里。无论你是在工位摸鱼、在高铁上出差、还是在星巴克喝咖啡,只要打开轻薄本,整个赛博算力世界都在你的指尖为你轰鸣。![![[Pasted image 20260502102203.png]]](https://i-blog.csdnimg.cn/direct/dd3743b0616f49e49fcd17b1f382b16f.png)
如果你在搭建过程中遇到了什么奇葩的报错,或者有更好用的远程炼丹神技,欢迎在评论区留言交流!如果这篇文章成功帮你实现了远程炼丹,别忘了点个赞和收藏支持一下!
🌟 最后,如果你觉得我写的自动化脚本 (Remote_Cloud_Compute) 帮节省了时间,请在 https://github.com/nbplus12345/Remote_Cloud_Compute 上点个 Star !你们的 Star 是我持续开源的最大动力!
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)