如何编写使用 vmware 工作站创建一次性虚拟机的脚本?

如何编写使用 vmware 工作站创建一次性虚拟机的脚本?

我正在制作一个一次性(用于一个任务/网站然后删除)虚拟机 (VM),在 VMware 工作站中执行此操作的过程很慢。我想使其自动化,以便它像 Secure OS Qubes 中快速的 ~5 秒 DispVM(一次性 VM=DispVM)功能一样。Qubes 简介

它只适用于一种使用情况,即当您必须访问经常受到攻击的 Java、Adobe Flash 等网站时,一次性网站浏览器 VM 便会使用。因此,如果 Adob​​e Flash 又出现安全问题,那也没关系,因为该 VM 已经不存在了。

想法的草图

  • 检查主虚拟机自上次快照以来是否发生了变化
  • ... 如果快照没有变化,则使用现有快照,否则创建新快照
  • 创建链接克隆(使用主虚拟机的磁盘 + 增量文件,因此我们不需要复制整个主虚拟机)
  • 将链接克隆命名为 Disp #(自动生成的序列号)
  • 当虚拟机关闭时,删除虚拟机

我需要帮助来完成整个所需的解决方案。

  • 如何检查虚拟机自上次快照以来是否发生了变化?VM 列表快照仅提供名称,而不是时间/日期戳。

  • 当脚本完成/终端关闭时,Bash 环境变量将被清除,因此 我如何存储或检测有多少个 DispVM 正在运行,以便知道如何命名下一个创建的 DispVM?我看到了这家商店文件中的变量方法,但希望有更好的选择:

  • 如何将其推广到多个 DispVM 同时运行并唯一地命名自己?

bash 脚本:

# assume snapshot current, | tail -1 (gives last snapshot name)
$strCurrentSnapshotName = vmrun -T ws listShapshots VMs/Master-Fedora-DVM.vmx | tail -1

# make linked clone
vmrun -T ws clone VMs/Master-Fedora/Master-Fedora-DVM.vmx VMs/DVM1/DVM1.vmx linked strCurrentSnapshotName 

vmrun start VMs/DVM1/DVM1.vmx

vmrun -gu <user> -gp <pass> runProgramInGuest VMs/DVM1/DVM1.vmx /usr/bin/firefox --display=:0

# How to  check if VM is powered off 
# when list of running VMs does not contain DVM then we are ok to break and delete
while [ !(vmrun -T ws list | grep DVM) ]
do
  sleep 5
done

# now dispose of and delete vm
vmrun -T ws unregister VMs/DVM1.vmx

# shred directory and delete
find VMs/DVM1/ -type f -exec shred {} \;
vmrun -T ws deleteVM VMs/DVM1/DVM1.vmx

相关内容