新闻详情

新闻详情

首页 / 资讯中心 / 详情

使用 Packer 与 Cloudbase-Init 在 Proxmox 上构建 GOAD Windows 模板:完整实战指南

发布时间:2026/9/26 2:35:11来源:尧图网络
使用 Packer 与 Cloudbase-Init 在 Proxmox 上构建 GOAD Windows 模板:完整实战指南
网络安全渗透测试【免费下载链接】GOADgame of active directory项目地址https://gitcode.com/gh_mirrors/go/GOAD点击查看免费下载导读GOADGame of Active Directory是一套用于练习 Active Directory 攻击与防御技术的开源实验环境而packer/proxmox目录正是其在 Proxmox 虚拟化平台上的“造镜像”环节通过 Packer 的proxmox-iso构建器把 Windows 评估版 ISO 自动安装、打上 VirtIO 驱动、注入 Cloudbase-Init 并执行 Sysprep最终产出可被 Terraform 直接克隆的云初始化cloud-init模板。读完本文你将掌握从下载 Windows ISO、生成 Autounattend 与脚本 ISO、编写 pkvars 变量文件、安装 Packer 到执行 validate/build 的完整流程并理解 Autounattend.xml 的无人值守安装细节与 Cloudbase-Init 在模板化过程中的关键作用。本文以 packer/proxmox/README.md 为主线结合仓库中的 build_proxmox_iso.sh、packer.json.pkr.hcl 与各版本.pkvars.hcl文件展开讲解。一、先搞清楚构建链路Packer 在 GOAD/Proxmox 中的位置在 GOAD 项目中Proxmox 平台的部署分成两段模板制造本文主题用 Packer 把一个干净的 Windows ISO 变成带 cloud-init 能力的模板虚拟机。仓库中所有系统盘都只读挂载在proxmox提供商下模板命名如WinServer2019_x64实例克隆Terraform 通过clone引用这些模板快速生成 DC01、DC02、SRV02 等实例见 ad/GOAD/providers/proxmox/windows.tf。因此Packer 环节解决的核心问题是Proxmox 上无法像 VirtualBox 那样直接挂载软盘A:\注入无人值守应答文件所以必须把所有自动化材料Autounattend.xml、Sysprep 脚本、Cloudbase-Init MSI 等打包成 ISO 挂载给安装程序。这正是build_proxmox_iso.sh脚本注释中明确写明的设计动机“transform files into iso, because proxmox only accept iso and no floppy A:\”见 build_proxmox_iso.sh。整体构建流程可概括为准备 Windows 评估版 ISO 与 Cloudbase-Init MSI用mkisofs把answer_files/目录打成 Autounattend ISO、把scripts/目录打成脚本 ISO编写config.auto.pkrvars.hcl与对应系统版本的.pkvars.hcl安装 Packer 与 Proxmox 插件packer validate校验、packer build构建产出 cloud-init 模板。二、前置物料Windows ISO 与 Cloudbase-Init MSI2.1 Windows 评估版 ISO按 README 说明需要从微软官方评估中心下载以下三个 ISO并放入 Proxmox 的 ISO 存储仓库中默认名为local对应proxmox_iso_storageISO 文件名对应系统仓库中对应的 pkvars 文件Windows-10-22h2_x64_en-us.isoWindows 10 22H2windows_10_22h2_proxmox_cloudinit.pkvars.hclwindows_server_2016_14393.0_eval_x64.isoWindows Server 2016windows_server2016_proxmox_cloudinit.pkvars.hclwindows_server2019_x64FREE_en-us.isoWindows Server 2019windows_server2019_proxmox_cloudinit.pkvars.hcl关键注意事项README 原文强调Be sure to name the iso like the name inside——下载后的 ISO 文件名必须与变量文件中iso_file字段指定的名称完全一致。例如 Windows Server 2019 的 pkvars 中写的是iso_file local:iso/windows_server2019_x64FREE_en-us.iso见 windows_server2019_proxmox_cloudinit.pkvars.hcl如果上传时改了名Packer 将无法在存储中找到该 ISO。2.2 Cloudbase-Init MSI从 Cloudbase-Init 官网下载CloudbaseInitSetup_Stable_x64.msi约 54.7 MB放到仓库 packer/proxmox/scripts/sysprep/ 目录下文件名保持为CloudbaseInitSetup_Stable_x64.msi。这个 MSI 会在后续build_proxmox_iso.sh打包脚本 ISO 时被一并封入scriptsISO并在系统首次登录时由 cloudbase-init.ps1 静默安装。三、Prepare生成 Autounattend 与脚本 ISO3.1 安装 mkisofs 并执行构建脚本sudo apt-get install mkisofs cd /root/GOAD/packer/proxmox/ ./build_proxmox_iso.sh提示仓库路径以克隆位置为准示例中的/root/GOAD是 README 的场景实际使用时请cd到你克隆仓库的packer/proxmox/目录。3.2 脚本到底做了什么逐行阅读 build_proxmox_iso.sh可以发现它针对 5 个场景各生成一个 Autounattend ISO外加 1 个脚本 ISO输出 ISO来源目录对应 pkvars 文件被自动更新 checksum./iso/Autounattend_windows10_cloudinit.isoanswer_files/10_proxmox_cloudinitwindows_10_22h2_proxmox_cloudinit.pkvars.hcl./iso/Autounattend_windows10_cloudinit_uptodate.isoanswer_files/10_proxmox_cloudinit_uptodatewindows_10_22h2_proxmox_cloudinit_uptodate.pkvars.hcl./iso/Autounattend_winserver2016_cloudinit.isoanswer_files/2016_proxmox_cloudinitwindows_server2016_proxmox_cloudinit.pkvars.hcl./iso/Autounattend_winserver2019_cloudinit.isoanswer_files/2019_proxmox_cloudinitwindows_server2019_proxmox_cloudinit.pkvars.hcl./iso/Autounattend_winserver2019_cloudinit_uptodate.isoanswer_files/2019_proxmox_cloudinit_uptodatewindows_server2019_proxmox_cloudinit_uptodate.pkvars.hcl./iso/scripts_withcloudinit.isoscripts/—不更新校验和该脚本的核心逻辑以 2019 普通版为例mkisofs -J -l -R -V autounatend CD -iso-level 4 \ -o ./iso/Autounattend_winserver2019_cloudinit.iso answer_files/2019_proxmox_cloudinit sha_winserv2019$(sha256sum ./iso/Autounattend_winserver2019_cloudinit.iso|cut -d -f1) sed -i s/\sha256:.*\/\sha256:$sha_winserv2019\/g windows_server2019_proxmox_cloudinit.pkvars.hcl两点值得注意mkisofs 参数-JJoliet 扩展、-l允许长文件名、-RRock Ridge 扩展、-V autounatend CD卷标、-iso-level 4ISO 9660 Level 4支持更长的文件名自动更新校验和每次重新打包 Autounattend ISO 后脚本都会重新计算 SHA-256并通过sed回写到对应.pkvars.hcl的autounattend_checksum字段。这意味着你无需手动维护校验和只要始终用脚本生成 ISO。3.3 上传 ISO 到 Proxmox把生成的packer/proxmox/iso/scripts_withcloudinit.iso放入 Proxmox 的 ISO 文件夹即proxmox_iso_storage对应的存储默认local。同样地前面生成的各个Autounattend_*.iso也要一并上传供后续 Packer 构建时通过additional_iso_files挂载。四、Configure编写 pkvars 变量文件4.1 从模板复制cp config.auto.pkrvars.hcl.template config.auto.pkrvars.hcl然后根据你的 Proxmox 环境修改其中每一项。模板内容见 config.auto.pkrvars.hcl.template变量示例值含义proxmox_urlhttps://192.168.1.1:8006/api2/jsonProxmox API 地址指向 8006 端口proxmox_usernameinfra_as_codepveAPI 用户后为 PVE realmproxmox_passwordCHANGEMEAPI 用户密码务必修改proxmox_skip_tls_verifytrue跳过 TLS 证书校验自签名证书环境下必须为 trueproxmox_nodeproxmox-goad目标物理节点名proxmox_poolTemplates资源池可选proxmox_iso_storagelocalISO 存放存储proxmox_vm_storagelocal-lvm虚拟机磁盘存放存储由于文件名带.auto.Packer 会自动加载config.auto.pkrvars.hcl无需显式-var-file指定。4.2 系统版本专属变量以 Server 2019 为例windows_server2019_proxmox_cloudinit.pkvars.hcl 完整内容winrm_username vagrant winrm_password vagrant vm_name WinServer2019x64-cloudinit-qcow2 template_description Windows Server 2019 64-bit - build 17763.737.190906-2324 - template built with Packer - cloudinit - {{isotime \2006-01-02 03:04:05\}} iso_file local:iso/windows_server2019_x64FREE_en-us.iso autounattend_iso ./iso/Autounattend_winserver2019_cloudinit.iso autounattend_checksum sha256:2b3eeb1346c38a3ef5e4daefcf58d212471db7c8a95dd3dff831b78aaa246e8e vm_cpu_cores 2 vm_memory 4096 vm_disk_size 40G vm_sockets 1 os win10 vm_disk_format qcow2参数说明winrm_username / winrm_passwordPacker 通过 WinRM 连接目标机执行配置脚本的凭据仓库统一使用vagrant/vagrant与 Autounattend 中创建的本地管理员账号一致vm_name / template_name最终生成的模板名称后续 Terraform 用clone引用template_description模板描述支持{{isotime}}模板函数生成构建时间戳iso_fileWindows 系统 ISO 在 Proxmox 存储中的位置必须与 2.1 节的文件名一致autounattend_iso / autounattend_checksum由build_proxmox_iso.sh生成的应答文件 ISO 及其 SHA-256脚本自动回写vm_cpu_cores / vm_memory / vm_disk_size / vm_sockets模板虚拟机规格osPacker 识别系统类型的字段仓库中统一写win10指代 Windows 10 系列安装流程vm_disk_format磁盘格式默认qcow2也支持raw等。另外还有带_uptodate后缀的变体例如 windows_server2019_proxmox_cloudinit_uptodate.pkvars.hcl它使用Autounattend_winserver2019_cloudinit_uptodate.iso、磁盘扩容到80G用于需要预装 Windows 补丁的场景。五、Ubuntu 虚拟机安装 PackerREADME 给出的标准安装方式基于 HashiCorp APT 源apt update apt -y install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - apt-add-repository deb [archamd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main apt update apt install packer说明apt-key add是旧版签名导入方式较新的 Ubuntu/Debian 可能提示弃用若遇到问题可改用把 GPG key 写入/usr/share/keyrings/hashicorp-archive-keyring.gpg并引用[signed-by...]的现代方式然后照常执行apt update apt install packer。本项目对 Packer 的最低插件版本要求为 1.1.2见 packer.json.pkr.hcl首次使用前建议执行一次packer init .来安装 Proxmox 插件。六、BUILD校验与构建模板README 原始命令基于当时的.json变量文件packer validate -var-fileconfig.json windows_server2019_proxmox.json packer build -var-fileconfig.json windows_server2019_proxmox.json当前仓库已全面 HCL 化源码内为windows_server2019_proxmox_cloudinit.pkvars.hcl等.pkvars.hcl文件模板为 packer.json.pkr.hcl对应命令为packer init . packer validate -var-filewindows_server2019_proxmox_cloudinit.pkvars.hcl . packer build -var-filewindows_server2019_proxmox_cloudinit.pkvars.hcl .同理可对 Windows 10windows_10_22h2_proxmox_cloudinit.pkvars.hcl和 Server 2016windows_server2016_proxmox_cloudinit.pkvars.hcl执行相同操作生成多套模板。6.1 构建器配置详解packer.json.pkr.hcl 中proxmox-iso构建器的关键设计三个附加 ISO 挂载点sata3Autounattend 应答文件 ISO带校验和校验unmount truesata4local:iso/virtio-win.isoVirtIO 驱动盘Windows 安装阶段加载磁盘/网卡驱动sata5local:iso/scripts_withcloudinit.iso存放 sysprep、Cloudbase-Init MSI、WinRM 配置等脚本cloud_initcloud_init true且指定cloud_init_storage_pool使生成的模板具备 cloud-init 能力供 Terraform 注入 IP/DNS/用户数据communicatorwinrm且winrm_use_ssl true、winrm_timeout 120m、winrm_insecure true自签名证书、winrm_no_proxy true网络桥接vmbr3、VirtIO 网卡、vlan_tag 10磁盘sata类型、存储池取自proxmox_vm_storagetask_timeout40m避免 Proxmox 任务长时间卡死。6.2 两个 PowerShell provisioner构建阶段会依次执行两个特权脚本均以vagrant用户提升运行见 packer.json.pkr.hclcloudbase-init.ps1把G:\sysprep\CloudbaseInitSetup_Stable_x64.msi复制到c:\setup并静默安装/qn日志写C:\setup\cloud-init.logcloudbase-init-p2.ps1pause_before 1m0s等待安装完成轮询日志出现Installation completed successfully后把三份配置文件cloudbase-init.conf、cloudbase-init-unattend.conf、cloudbase-init-unattend.xml复制到 Cloudbase-Init 的 conf 目录随后禁用 cloudbase-init 自启动最后执行sysprep.exe /generalize /oobe /mode:vm /unattend:cloudbase-init-unattend.xml完成系统封装。Sysprep 结束后模板即进入“可克隆”状态。七、深度原理Autounattend.xml 与无人值守安装细节所有无人值守逻辑都封装在answer_files/各版本的Autounattend.xml中以 2019_proxmox_cloudinit/Autounattend.xml 为例7.1 windowsPE 阶段加载 VirtIO 驱动安装程序从F:virtio-win.iso加载\2k19\amd64目录下的viostor存储、NetKVM网络、Balloon、pvpanic、vioscsi等全部驱动见 Autounattend.xml。这是 Proxmox 下 Windows 能否识别 VirtIO 磁盘与网卡的关键。7.2 磁盘与映像安装将整块磁盘DiskID 0创建为单个主分区并格式化为 NTFS、卷标Windows 2019WillWipeDisk true从镜像安装Windows Server 2019 SERVERDATACENTER到分区 1使用评估版 ISO 时无需填写ProductKey注释中明确说明Do not uncomment the Key element if you are using trial ISOs语言设置为 en-US 主界面、fr-FR 输入法仓库默认值可按需修改。7.3 首次登录命令序列FirstLogonCommands安装完成后按Order顺序执行一系列命令包括设置 64/32 位 PowerShell 执行策略为RemoteSigned、关闭网络弹窗、执行G:\fixnetwork.ps1修复网络分类、执行G:\disable-winrm.ps1临时禁用 WinRM、注册表优化显示文件扩展名、QuickEdit、显示运行/管理工具、关闭休眠、设置 vagrant 密码永不过期、启用自动登录、放行 WinRM 防火墙规则、安装F:\guest-agent\qemu-ga-x86_64.msiQEMU guest agent等。7.4 “no updates” 与 “WITH WINDOWS UPDATES” 开关这是 README 中“Windows update”一节的落点在Autounattend.xml中存在一对注释开关见 Autounattend.xml默认no updates!-- no updates --生效第 98 步执行G:\ConfigureRemotingForAnsible.ps1配置 WinRM第 99 步执行G:\enable-winrm.ps1启用 WinRM随后被!-- end no update --注释掉WITH WINDOWS UPDATES注释掉 no updates 块改为启用G:\microsoft-updates.bat开启 Microsoft Update 源、G:\disable-screensaver.ps1关闭屏保避免安装更新时中断与G:\win-updates.ps1安装 Windows 更新。仓库已预置两套Autounattend.xml普通版与_uptodate版两套文件的开关状态恰好相反因此“想要带补丁的模板”无需手工改注释直接用_uptodate版文件与对应 pkvars 构建即可。八、Cloudbase-Init让模板获得 cloud-init 能力模板最终通过 Cloudbase-Init 对接 Proxmox 的 cloud-init 驱动config drive。核心配置在 cloudbase-init.confmetadata_servicescloudbaseinit.metadata.services.configdrive.ConfigDriveService只启用 config drive 元数据服务plugins启用了网络配置、设置用户密码、用户数据、设置主机名、MTU、扩展卷等插件其中ExtendVolumesPlugin会把磁盘扩展到 cloud-init 指定大小这正是模板磁盘40G、实例却可更大容量的原因inject_user_passwordtrue、config_drive_raw_hhd/cdrom/vfattrue兼容多种 config drive 介质。Sysprep 阶段使用的 cloudbase-init-unattend.xml 则负责在 generalize 后重新把 cloudbase-init 服务设为自启动sc config cloudbase-init start auto保证模板克隆出的实例在首次启动时能正确执行 cloud-init。至此enable-winrm.ps1见 scripts/enable-winrm.ps1与ConfigureRemotingForAnsible.ps1共同保证了克隆出来的实例能被 Ansible 通过 WinRM 管理为 GOAD 后续的域环境配置ad、adcs、vulns 等 playbook铺平道路。九、模板在 GOAD 中的落地使用构建完成的模板会立刻被 GOAD 的 Proxmox Terraform 配置引用。以 ad/GOAD/providers/proxmox/windows.tf 为例DC01/DC02/SRV02 等实例通过clone WinServer2019_x64直接基于模板克隆并借助 cloud-init 注入ip、dns、gateway与主机名。也就是说本文构建的模板质量直接决定整个 GOAD 实验环境的可用性。十、常见问题与注意事项TLS 自签名Proxmox 默认自签名证书务必保持proxmox_skip_tls_verify true否则 Packer API 调用会报证书错误ISO 命名一致性上传到local存储的 Windows ISO 名称必须与iso_file完全一致README 明确强调校验和自动维护重新生成 Autounattend ISO 后build_proxmox_iso.sh会自动更新 pkvars 中的sha256:校验和无需手工修改但前提是你重新运行了脚本WinRM 超时模板构建依赖 WinRMwinrm_timeout默认 120 分钟、task_timeout默认 40 分钟安装更新版本耗时更长若超时可适当上调virtio-win.iso构建器在sata4挂载local:iso/virtio-win.iso需要先从 VirtIO 驱动站点下载并上传到 Proxmox 的 ISO 存储否则安装阶段无法加载驱动CloudbaseInitSetup_Stable_x64.msi必须预先放到 packer/proxmox/scripts/sysprep/ 目录它会被封进scripts_withcloudinit.iso缺失该文件时cloudbase-init.ps1将无从安装。通过以上步骤你可以为 GOAD 的 Proxmox 环境批量产出 Windows 10、Server 2016、Server 2019 的 cloud-init 模板并选择是否预装 Windows 更新从而获得一套完全自动化的实验环境供应链路。赞分享网络安全渗透测试【免费下载链接】GOADgame of active directory项目地址https://gitcode.com/gh_mirrors/go/GOAD点击查看免费下载相关推荐Plate 性能基准文档工程化指南以 Plate vs Slate 为核心的诚实分层基准方案Plate 性能基准文档工程化指南以 Plate vs Slate 为核心的诚实分层基准方案 本篇指南围绕 Plate 开源仓库中的性能基准文档计划展开说明网络安全渗透测试终极Vim风格Windows操作指南告别鼠标拥抱键盘效率革命终极Vim风格Windows操作指南告别鼠标拥抱键盘效率革命 在Windows操作系统中你是否厌倦了频繁在键盘和鼠标之间切换是否渴望像Vim编辑器那样高在 Windows 上使用 Visual Studio 构建 CUTLASS完整实战指南在 Windows 上使用 Visual Studio 构建 CUTLASS完整实战指南 CUTLASSCUDA Templates for Linear算子库高性能计算上一篇终极指南使用Python bilibili-api库开发B站自动化工具下一篇BentoPDF 数字签名验证实战在浏览器中校验 PDF 签名完整性、证书有效期与信任链创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

开放式代码审查:从流程设计到团队协作的实践指南 2026/9/26 3:53:54

开放式代码审查:从流程设计到团队协作的实践指南

做研发这十多年,我陆陆续续参加过上千次代码评审,也亲眼看着不少团队的 review 制度从认真到敷衍,最后变成一个“点个通过”的过场。真正让我下定决心把 open-code-review 这套机制彻底想透的,是几年前的一场线上事故:…

阅读更多 →
AI新时代下的图床管理方案:Cloudflare R2 + MCP + Skills 配置指南(含 TaoToken 统一 Key 接入) 2026/9/26 3:53:54

AI新时代下的图床管理方案:Cloudflare R2 + MCP + Skills 配置指南(含 TaoToken 统一 Key 接入)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
openclaw 启用完整的工具集:从 config 到 gateway 打通命令执行能力 2026/9/26 3:53:54

openclaw 启用完整的工具集:从 config 到 gateway 打通命令执行能力

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Openclaw 究竟是什么?从配置文件到 CC Switch 的完整接入 TaoToken 实践 2026/9/26 3:53:54

Openclaw 究竟是什么?从配置文件到 CC Switch 的完整接入 TaoToken 实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
人因交互方法配 TaoToken:从 settings.json 到 CC Switch 的配置骨架 2026/9/26 3:53:54

人因交互方法配 TaoToken:从 settings.json 到 CC Switch 的配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
惊艳全场!带着Claude Code味儿的ChatGPT Image2发布,重构AI生图市场,重塑多行业格局 2026/9/26 3:53:47

惊艳全场!带着Claude Code味儿的ChatGPT Image2发布,重构AI生图市场,重塑多行业格局

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉