在主机上的VirtualBox guest虚拟机启动后,在Windows主机上运行命令


0

有几种方法可以在托管(“guest”)计算机上从外部“主机”计算机上运行命令。

我正在寻找的是更多 相反的 - 在启动虚拟机之后,我需要在VM内部运行的服务器上打开一个Web页面,浏览器在VM外部运行。

实际上并不是我想要运行命令 来自客人 - 如果主机完成所有工作,启动虚拟机并运行命令,实际上会更好,而客户则不是更明智的。

因为它是启动guest的主机,所以我认为它会提供一些后运行钩子。当然,主机可以知道VM何时启动但无法知道 什么时候完成启动 (虽然,添加VirtualBox Tool可能......?)。

我认为有一种方法可以利用VM通信协议来实现这一点,当然还有必要的防御措施 - 可能有充分的理由在VM中运行某些东西而不是让精灵从瓶子里出来 - 但似乎这样功能根本不可用。

我最接近的是一种非常迂回的方式:

  1. 在主机上安装WinSSHd(SSH for Windows),因为我无法获得 PowerShell远程处理 从Linux来宾VM运行
  2. 挂接客户机上的加电脚本
  3. 在guest虚拟机上生成SSH密钥,并在主机上将其安装为受信任的密钥
  4. 从guest虚拟机到主机运行SSH命令(或多个)
  5. 利润。

但是在Windows上安装SSH守护进程并不是我觉得舒服的事情,所以...... 还有另外一种方式


你可以编写一个ping VM的脚本,当它启动时,启动网页;它可能会ping,但只会告诉你网络堆栈何时处于活动状态,如果它是一个网页,它可以telnet到端口80.成功连接意味着它是活动的,断开telnet并产生网页......?
txtechhelp

Answers:


0

Virtualbox没有可以从guest虚拟机执行的“运行此主机程序”命令。但Virtualbox Guest Additions具有“guestproperties”:主机和guest虚拟机之间的低带宽文本字符串传输机制,可以在脚本说明时使用脚本运行宿主程序。

此命令在主机上运行:

"Vboxmanage.exe guestproperty get|set /customnameclass/custompropertyname"

这在客人:

"Vboxcontrol.exe guestproperty get|set /customnameclass/custompropertyname"

主机脚本可以使用Vboxmanage命令将guest属性设置为“已更改”值,然后在循环中获取guest属性,等待值更改回来。当值更改回来时,脚本可以继续运行其他所需的命令。

在guest虚拟机上,另一个脚本可以等待所需的服务可用,然后使用VboxControl命令将guestproperty设置为主机脚本正在等待的值。脚本可以循环,在服务存在时继续设置guest属性,而在服务关闭时不设置guest属性。因此,主机可以知道客户的服务何时存在且可用。

/customnameclass/custompropertyname 是你想要使用的任何名字。可以使用不同的类和属性名称来设置多个通信通道。

如果您不想或不能使用Guest Additions,则类似的概念可以与共享文件夹中的标志文件一起使用。来宾脚本在共享文件夹中创建标志文件(具有已知名称的简单文本文件);主机脚本查找标志文件并运行所需的程序。

如果您有主机和来宾的Windows,您可以使用Microsoft Sysinternals的“PsExec”,它在联网的Microsoft PC之间运行命令,而无需在主机PC上使用轮询脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.