---
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: false
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程序（缺少大量动态链接库），其做虚拟机宿主的主要功能也不符合我的使用场景，我没有再继续使用，到此删除了实例。