---
url: /vm/esxi/ph48hyup/index.md
---
## 概述

Debian 官方提供预构建的云镜像（Cloud Image），镜像内已集成 cloud-init（云初始化工具），免去手动安装系统的过程。本文记录将 Debian Cloud Image 转换为 ESXi 可用的虚拟磁盘（VMDK，Virtual Machine Disk）、通过 cloud-init 注入初始用户与密码、并在 ESXi 上完成开机与基础配置（SSH、root 密码、网络查看）的完整流程，适用于需要快速在 ESXi 上拉起一台 Debian 虚拟机的场景。

## 一、下载 Debian Cloud Image

官方镜像地址：<https://cloud.debian.org/images/cloud/>

下载后假设文件名为 `debian.qcow2`（qcow2 为 QEMU 的磁盘镜像格式）。

## 二、转换为 ESXi 可用 VMDK

先转换成 raw（若原始文件已是 qcow2）：

```bash
qemu-img convert -f qcow2 -O raw debian.qcow2 debian.raw
```

再转换成 ESXi 可识别的 VMDK：

```bash
qemu-img convert -f raw -O vmdk \
  -o adapter_type=lsilogic,subformat=monolithicFlat \
  debian.raw debian.vmdk
```

> \[!NOTE]
>
> * `adapter_type=lsilogic`：指定 SCSI 控制器类型，ESXi 默认可识别。
> * `subformat=monolithicFlat`：生成可直接挂载开机的厚置备磁盘，产物为 `debian.vmdk` 与 `debian-flat.vmdk` 配对文件。

> \[!IMPORTANT]
> `monolithicFlat` 才能直接作为 ESXi 虚拟硬盘开机；`streamOptimized` 仅用于 OVF/OVA 导入，不能直接挂载启动。

## 三、创建 cloud-init 配置

创建 `user-data`（示例路径 `/root/user-data`）：

```yaml
#cloud-config
users:
  - name: debian
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false

chpasswd:
  list: |
    debian:123456
  expire: false
```

> \[!NOTE]
>
> * `lock_passwd`: `false` 允许该用户使用密码登录；
> * `chpasswd` : 用户`debian` ，初始密码 `123456`；

创建 `meta-data`（示例路径 `/root/meta-data`）：

```ini
instance-id: debian-01
local-hostname: debian
```

## 四、生成 seed.iso

```bash
cloud-localds /root/seed.iso /root/user-data /root/meta-data
```

> \[!TIP]
> `cloud-localds` 由 `cloud-utils` 包提供，在 Debian/Ubuntu 主机上执行 `apt install cloud-utils` 安装。

> \[!NOTE]
> 生成成功后得到 `/root/seed.iso`，该 ISO 在虚拟机首次启动时由 cloud-init 读取，用于初始化用户与主机名。

## 五、在 ESXi 创建虚拟机

1. 创建新虚拟机：
   * 客户机操作系统：Linux → Debian 13（64 位）
   * SCSI 控制器：LSI Logic SAS
2. 上传 `debian.vmdk` 到 datastore
3. 上传 `seed.iso` 到 datastore
4. 编辑虚拟机设置：
   * 将 `debian.vmdk` 添加为硬盘
   * 将 `seed.iso` 挂载到 CD/DVD 驱动器
5. 确保 CD/DVD 驱动器「开机时连接」已勾选（首次启动必须能读到 seed.iso）

## 六、启动虚拟机

首次启动时，cloud-init 读取 `seed.iso`，自动创建用户 `debian`，密码 `123456`。

登录信息：

```text
用户名：debian
密码：123456
```

验证 sudo 权限：

```bash
sudo -i
```

## 七、清理（可选）

* 首次启动并登录后，可在虚拟机设置中卸载 `seed.iso`
* 删除 `/root/seed.iso`，避免下次开机 cloud-init 重复应用初始化配置
* 按需修改用户密码或创建更多用户

## 八、开启 SSH 登录

1. 备份原配置文件：

   ```bash
   sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
   ```

2. 编辑 SSH 配置文件：

   ```bash
   sudo nano /etc/ssh/sshd_config
   ```

3. 找到并修改以下参数（行首 `#` 注释符需一并删除）：

   ```ini
   PermitRootLogin yes
   ```

   ```ini
   PasswordAuthentication yes
   ```

4. 保存并退出（Nano：Ctrl+O 保存，Ctrl+X 退出）。

5. 重启 SSH 服务：

   ```bash
   sudo systemctl restart ssh
   ```

> \[!WARNING]
> 开启 `PermitRootLogin yes` 且使用密码认证属于高危配置，仅建议在隔离的内网环境或临时调试时使用；生产环境应改用密钥登录并禁用 root 远程登录。

## 九、其他配置

1. 为 root 用户设定密码：

   ```bash
   sudo passwd root
   ```

2. 查看当前网络接口：

   ```bash
   ip a
   ```

## 十、VMDK 子格式对比

| 子格式（subformat） | 用途 | 能否直接开机 |
| --- | --- | --- |
| monolithicFlat | ESXi 虚拟硬盘（厚置备） | 能 |
| thin | ESXi 虚拟硬盘（精简置备） | 能 |
| streamOptimized | OVF/OVA 导出导入 | 不能（仅用于导入） |

> \[!TIP]
> 直接在 ESXi 上开机，选 `monolithicFlat`（厚置备）或 `thin`（精简置备）；需要打包成 OVA 分发时才用 `streamOptimized`。
