--- title: "试用CLab提供的云服务器,并配置Hyper-V Server 2019" description: "相较于GNU/Linux,基于Win32的服务器并不好用。" date: 2026-05-27T23:41:26+08:00 image: math: license: hidden: false comments: false draft: true slug: "00I" --- ### 创建实例 - 在[CLab官网](https://clab.pku.edu.cn/)登录你的校园网账号。 - 按照以下配置进行设置: - 基础配置: - 可用域:`nova`; - 规格:`x86架构`-`playgrounds`-`p4`; > 这个规格是基于AMD EPYC 7773X虚拟化而来的4个vCPU+4GB内存。 - 启动源:`镜像`; - 操作系统:`其他`-`Hyper-V Server 2019`; - 从云硬盘启动:`是 - 创建云硬盘`; - 系统盘: - 类型:`SSD`; - 容量:`100`GiB; - 随云主机删除:`是`; - 网络配置: - 网络:`共享网络`-`pku`; - 虚拟网卡: - `pku`; - `自动分配地址`; - 安全组:`default`; > 先前往“新建安全组”页面创建一个空的安全组。我的命名为`default`。 - 系统配置: - 名称; - 登录凭证:`密码`; > 我一开始选的`密钥`,但好像对这个系统不起作用捏。 - 登录密码; - 确认密码; - 确认配置,确定。 - 等待实例创建并启动。 ### 实例开机 实例开机后,点击“控制台”便可以使用远程桌面。这相当于一个QEMU窗口的画面。鼠标滑动有点卡,应该是没有安装显卡驱动。 由于我选的`密钥`,没有创建管理员密码,开机后有个黑框框要我设置管理员密码。 设置完密码之后,便进入了系统。有两个窗口:一个是Windows上正常的`cmd.exe`,另一个是这个系统独有的`sconfig.cmd`;后者是一个服务器配置菜单。 菜单有如下内容: ``` 1) 域/工作组:工作组:WORKGROUP 2) 计算机名:SUCROSE 3) 添加本地管理员 4) 配置远程管理 5) Windows 更新设置:仅下载 6) 下载并安装更新 7) 远程桌面:已启用(仅更安全的客户端) 8) 网络设置 9) 日期和时间 10) 遥测设置:未知 11) 注销用户 12) 重新启动服务器 13) 关闭服务器 14) 退出到命令行 ``` 最后一行可以输入数字,按回车进行对应的配置。 关于这些配置的含义…我不是很懂捏……让DeepSeek解释了一下: 1) 域/工作组 - 作用:把服务器加入 Windows 域,或改回 工作组。 - 什么时候用:公司内网有域控制器时,加入域可统一管理用户和权限。 2) 计算机名 - 作用:修改服务器名称(需要重启)。 - 什么时候用:刚装好系统,或服务器用途改变时(比如从 `SUCROSE` 改为 `FILE01`)。 3) 添加本地管理员 - 作用:向本机的 `Administrators` 组添加用户(可以是本地用户或域用户)。 - 什么时候用:需要给别人临时管理员权限,又不想直接用默认 Administrator。 4) 配置远程管理 - 作用:开启/关闭 WinRM(远程管理服务)。 - 什么时候用:你想用 `Enter-PSSession`、Server Manager 或 Ansible 等工具远程管理该服务器时需开启。 5) Windows 更新设置 - 作用:设置更新下载与安装模式。 常见选项:自动下载并安装、仅下载、从不检查等。 - 什么时候用:控制服务器的重启行为(生产服务器通常不会设为自动安装)。 6) 下载并安装更新 - 作用:立即检查并安装 Windows 更新(手动触发)。 - 什么时候用:补丁准备就绪后,你主动选择安装(即使选项 5 是“仅下载”)。 7) 远程桌面 - 作用:开启/关闭 RDP(远程桌面),并选择安全级别(支持 NLA 或全部客户端)。 - 什么时候用:需要通过 `mstsc` 登录服务器桌面进行操作时。 8) 网络设置 - 作用:修改 IP 地址、子网掩码、网关、DNS 等网络配置。 - 什么时候用:服务器 IP 需要固定(不要依赖 DHCP)的场景。 9) 日期和时间 - 作用:调整时区、系统时间,或配置 NTP 时间同步。 - 什么时候用:服务器时间不准导致登录失败、日志错乱或认证出错时。 10) 遥测设置 - 作用:设置向微软发送的“诊断和使用数据”级别(安全、增强、完整等)。 - 什么时候用:通常保持默认即可;特殊合规要求下可降低级别。 11) 注销用户 - 作用:注销当前控制台登录的用户(回到登录界面)。 - 什么时候用:别人要用服务器,或你想换账户操作。 12) 重新启动服务器 - 作用:重启系统。 - 什么时候用:更新需要重启、系统出现异常、修改了关键配置后。 13) 关闭服务器 - 作用:直接关机。 - 什么时候用:维护硬件、迁移虚拟机、或不再使用此服务器时。 14) 退出到命令行 - 作用:退出 `sconfig.cmd`,回到普通 `cmd` 窗口(不重启、不修改任何东西)。 - 什么时候用:你只是想看一下状态,之后要执行其他命令行操作。 值得注意的是,这个系统并没有`explorer.exe`,不支持桌面环境。(把Windows 10的`explorer.exe`复制进去不知道有没有用😂大概是没用的吧……) 但还可以用notepad大法😋`cmd.exe`输入`notepad`,点`文件`-`打开`,就可以看到经典的GUI文件选取界面啦。里面进行系统目录的浏览会更方便。 ### 配置sshd 这个系统并不自带`sshd`,需要手动安装,才能通过SSH连接。 先输入`powershell`打开PowerShell。 ```powershell Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' ``` 返回`State: Not Present`,说明没安装,需要手动安装。 能否通过`Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0`自动安装捏?不行😋 因为这个实例和我们手上的设备一样,连校园网之后需要到[its.pku.edu.cn](https://its.pku.edu.cn/)上面登录,才能访问外网。而这个系统连Internet Explorer都没有(甚至因此用不了`curl`……),自然无法登录。 没有外网连接,没有`sshd`(不能`scp`),是不是没法传输文件捏……并非如此。这个服务器有`10.0.0.0/8`地址,可以访问内网用户。 在我的联网Mac上访问[https://github.com/PowerShell/Win32-OpenSSH/releases](https://github.com/PowerShell/Win32-OpenSSH/releases),下载预编译版的[OpenSSH-Win64.zip](https://github.com/PowerShell/Win32-OpenSSH/releases/download/10.0.0.0p2-Preview/OpenSSH-Win64.zip)(注意时效性)到我的`~/Downloads`目录,然后打开终端: ```zsh cd ~/Downloads python3 -m http.server 8000 ``` 建立了一个简易文件服务器。 在实例上:(复制时注意占位符) ```powershell Invoke-WebRequest -Uri "http://<我的内网IP地址>:8000/OpenSSH-Win64.zip" -OutFile "C:\OpenSSH-Win64.zip" Expand-Archive C:\OpenSSH-Win64.zip C:\ cd C:\OpenSSH-Win64 ./install-sshd.ps1 ``` 即可安装完成`sshd`。 ```powershell netsh advfirewall firewall add rule name=SSH dir=in action=allow protocol=TCP localport=22 start-service sshd set-service sshd -startuptype automatic get-service sshd ``` 看到`Running`就行,配置完成。此时Mac上输入`ssh Administrator@<实例内网IP地址>`,再输入密码,即可连接。 ### 通过VSCode Remote SSH连接 Mac上配置SSH配置文件:打开`~/.ssh/config` ``` Host Windows HostName <实例内网IP地址> Port 22 User Administrator ``` 点击连接,输入管理员密码即可。 > 我这还出现了一个神秘报错:ServerFailedToStart │ Error: ServerFailedToStart (VS Code 服务器启动失败); > 仔细看log: > ```log > [37724 ms] Failed to download VS Code Server (https://update.code.visualstudio.com/commit:f6cfa2ea2403534de03f069bdf160d06451ed282/server-win32-x64/stable): SHA mismatch, actual 951b7fb277243c389a9a683c9c2e5a21d3fbf01e8b29573ee9b4cadb5e63986a != expected > ``` > 解决方法:Mac终端执行: > ```zsh > rm -rf ~/.vscode-server > rm -rf ~/.vscode-remote-containers > ``` > 清理本地的`.vscode-server`文件夹缓存文件即可。 ### 配置密钥登录 Mac上输入: ```zsh ssh-keygen -t ed25519 ``` 第一次回车出现`Enter file in which to save the key`,设置一个易于辨识的名字(如`Windows_server`)。后面两个直接回车就行。 不像Linux服务器,在客户机上通过`ssh-copy-id`发送公钥到服务器,Windows服务器是需要在服务器上执行命令的。 先获取文本形式的公钥:Mac上执行: ```zsh cat ~/.ssh/Windows_server.pub ``` 复制得到`<公钥文本>`之后,在服务器上输入:(复制时注意占位符) ```powershell Add-Content -Force -Path "$env:ProgramData\ssh\administrators_authorized_keys" -Value <公钥文本> Restart-Service sshd ``` 即可通过SSH密钥登录。 记得修改`~/.ssh/config`: ``` Host Windows HostName 10.129.80.39 Port 22 User Administrator IdentityFile ~/.ssh/Windows_server AddKeysToAgent yes UseKeychain yes ``` 由于命令不是POSIX标准,而是冗长的PowerShell格式,很多macOS/Linux下的实用工具(如htop)也不适配Windows,也由于这个系统无法运行常规的GUI程序(缺少大量动态链接库),其做虚拟机宿主的主要功能也不符合我的使用场景,我没有再继续使用,到此删除了实例。