自动化您的 VirtualBox 配置
发布时间:2017年6月7日 - 4分钟阅读
我们在一些软件上经常会遇到一些鲜为人知但却非常方便的功能。VirtualBox就有这样一个功能,命令行。
VBoxManage是VirtualBox的命令行界面。有了它,你完全可以在主机操作系统的命令行中控制VirtualBox。VBoxManage支持GUI给你提供的所有功能,但它支持的功能远不止这些。它公开了虚拟化引擎的所有功能,甚至是那些无法(还不能)从GUI访问的功能。
幸运的是,VBoxManage有大量的文档,使生活变得简单。它涵盖了VBoxManage中的所有可用选项。如果你发现自己在使用 VBoxManage,文档是你的参考资料。
与其说是在官方文档中已经广泛涉及的内容,让本文成为VBoxManage的又一教程,不如说是我最近使用VirtualBox命令行解决的一个问题。
问题是
我开始在一个开放的安全社区举办研讨会。在开放社区举办研讨会的好处是,很难预测人们带着什么样的软件/硬件走进来。你必须意识到软件依赖性和硬件要求。
我们计划举办一个关于网络侦查的研讨会。作为实验室设置的一部分,我们面临着一系列的挑战。
- 我们想让观众运行几个完整的虚拟机作为实验室的一部分,以展示远程操作系统检测技术,利用内核网络栈实现的差异,所以使用容器是不可能的。
- 我们希望运行 "ReactOS "以避免混乱的Windows许可条款。运行ReactOS意味着,使用Vagrant或容器不是一个简单的选择。
- 观众携带的笔记本电脑有各种主机操作系统。Windows没有原生的SSH客户端,所以Vagrant又不是一个可行的选择。
- 我们希望实验室的设置尽可能的自动化,而不是让观众点击每一步,简单的VirtualBox GUI是无法满足的。
VBoxManage FTW!
这时,我们没有太多选择,只能求助于老牌的VirtualBox,这时我认真考虑了VirtualBox命令行。
- VirtualBox可以运行几乎所有的*nix机器,也可以运行ReactOS。
- VBoxManage支持实验室设置的完全自动化(事实上Vagrant在后台使用VBoxManage)。
- VBoxManage在所有安装了VirtualBox的平台上都可以使用。
解决方案的步骤
创建实验室设置
我们创建了一堆虚拟机。其中一些虚拟机作为受害者,一个虚拟机作为实验室中的攻击者。我们使用VirtualBox GUI从我们的Linux机器中导出OVA格式的虚拟机。这时我们有一个目录,里面有所有OVA格式的实验室虚拟机。
导入实验室设置
- 我们为
*nix创建了一个bash脚本,为Windows创建了一个批处理文件,以使用VBoxManage自动导入实验室设置。 - Windows的问题是VBoxManage只能在VirtualBox安装目录下作为命令使用,所以我们必须调整批处理文件。
- 下面的脚本导入所有需要的OVA文件,并列出主机上所有可用的虚拟机,以检查OVA是否成功导入。
bash脚本导入实验室虚拟机。
#!/usr/bin/env bash
VBoxManage import "victim1.ova"
VBoxManage import "victim2.ova"
VBoxManage import "attacker.ova"
printf "\n\nList of all the VMs\n------------------------\n"
VBoxManage list vms
batch脚本来导入实验室虚拟机。
PATH=%PATH%;C:\Program Files\Oracle\VirtualBox
vboxmanage import "victim1.ova"
vboxmanage import "victim2.ova"
vboxmanage import "attacker.ova"
echo. && echo 'List of all VMs' && echo. && echo '-------------------------'
vboxmanage list vms
cmd \k
开始实验室
- 我们创建了一个
*nix的bash脚本和Windows的批处理文件来运行实验室。 - 我们希望在后台运行受害者,只显示攻击者。VirtualBox无头模式在后台运行一个虚拟机。
- 我们从Linux机器导出OVA,而Windows上的VirtualBox主机专用网络适配器名称与Linux不一致,所以我们不得不使用vboxmanage modifyvm来修改适配器名称。
- 下面的脚本在后台运行所有的受害者,并显示攻击者的虚拟机。这个脚本列出了所有正在运行的虚拟机,以检查是否所有的东西都在运行。
bash脚本来启动实验室。
#!/usr/bin/env bash
vboxmanage startvm "victim1" --type headless
vboxmanage startvm "victim2" --type headless
vboxmanage startvm "attacker"
printf "\n\nList of all the VMs running\n------------------------------\n"
vboxmanage list runningvms
batch脚本来启动实验室。
PATH=%PATH%;C:\Program Files\Oracle\VirtualBox
vboxmanage modifyvm "victim1" --nic1 hostonly --hostonlyadapter1 "VirtualBox Host-Only Ethernet Adapter"
vboxmanage modifyvm "victim2" --nic1 hostonly --hostonlyadapter1 "VirtualBox Host-Only Ethernet Adapter"
vboxmanage modifyvm "attacker" --nic1 hostonly --hostonlyadapter1 "VirtualBox Host-Only Ethernet Adapter"
vboxmanage startvm "victim1" --type headless
vboxmanage startvm "victim2" --type headless
vboxmanage startvm "attacker"
echo. && echo 'List of all the running VMs' && echo. && echo '-------------------------'
vboxmanage list runningvms
cmd \k
停止实验室
- 创建了
*nix的bash脚本和Windows的批处理文件来优雅地关闭实验室。 vboxmanage controlvm有一个选项可以关闭正在运行的虚拟机。- 下面的脚本关闭了所有正在运行的实验室虚拟机,并列出了当前正在运行的虚拟机,以检查一切是否正常关闭。
bash脚本来停止实验室。
#!/usr/bin/env bash
vboxmanage controlvm "victim1" poweroff
vboxmanage controlvm "victim2" poweroff
vboxmanage controlvm "attacker" poweroff
printf "\n\nList of all the VMs running\n------------------------------\n"
vboxmanage list runningvms
批量文件来停止实验室。
PATH=%PATH%;C:\Program Files\Oracle\VirtualBox
vboxmanage controlvm "victim1" poweroff
vboxmanage controlvm "victim2" poweroff
vboxmanage controlvm "attacker" poweroff
echo. && echo 'List of all the running VMs' && echo. && echo '-------------------------'
vboxmanage list runningvms
cmd \k
结论
VBoxManage是VirtualBox提供的一个非常整洁而强大的界面。当你试图自动化你的虚拟环境时,特别是当你试图分发你的环境时,它就会很方便。本文探讨了这样一个问题的解决方案,这还不是冰山一角,找到一个问题/挑战,阅读VBoxManage文档,并享受其中的乐趣!
通过www.DeepL.com/Translator(免费版)翻译