从来宾vm运行VBoxManage?

时间:2013-10-10 15:02:23

标签: ssh virtualbox vagrant

我需要在vagrant / virtualbox vm上有选择地禁用主机时间同步。我可以在主机上没有问题就这样做:

$ VBoxManage setextradata <name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"

问题是我只需要在guest虚拟机vm中完成一些工作时禁用同步。具体来说,单元测试作业需要能够以编程方式切换GetHostTimeDisabled值,从而有效地完全控制测试作业的vm系统时间。

我考虑过在单元测试作业中通过ssh运行VBoxManage命令,但这会带来额外的困难。比如,例如,设置无密码登录到我的本地计算机作为vagrant用户。

我为vm启用了ssh代理转发功能,并且已确认正常工作。除非有人提出“更好”的建议,否则我会感谢一些帮助,想知道如何从vm(ubuntu linux)作为流浪者用户回到主机(OSX)。理想情况下,我希望它对流浪者的所有用户都一样。也许以某种方式使用转发的代理?

也许有办法在guest虚拟机上操作VBoxService来暂时禁用时间同步?

2 个答案:

答案 0 :(得分:2)

我已经使用ssh在主机上运行VBoxManage命令解决了这个问题。

  1. 在Vagrantfile中启用ssh转发
    • 例如,config.ssh.forward_agent = true
  2. 让自己像自己一样ssh自己;)
    • 换句话说,将您自己的公钥复制到您自己的authorized_keys文件
    • 例如,$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. 默认情况下将VM设置为ssh(而不是流浪者用户)

    • ,例如,通过Vagrantfile中的shell配置程序:

        require 'etc'
        username = Etc.getlogin
        config.vm.provision :shell, :inline => "echo \"Host *\n  User #{username}\" > /home/vagrant/.ssh/config"
      
  4. 像这样自由地回到主机:(主机的默认NAT IP是10.0.2.2)

    $ ssh 10.0.2.2 'hostname'
    $ ssh 10.0.2.2 'VBoxManage setextradata <your vm name> \
      "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"'
    $ echo "GetHostTimeDisabled is now " && \
      ssh 10.0.2.2 'VBoxManage getextradata <your vm name> \
      "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled"'
    

答案 1 :(得分:0)

我看到你找到了答案,但我想到了另一种方式。

VirtualBox有一个名为“共享文件夹”的概念。这意味着您可以在主机上设置一个文件夹,该文件夹可以在客户机上安装,并且在主机和主机之间保持不变。 guest,意味着您可以在guest虚拟机运行时共享数据。您甚至可以自动安装它,在这种情况下它将作为/media/<folder>安装。然后,您可以将其符号链接到您想要的任何位置。

根据我的想法,您可以将VBoxManage.exe放入主机的共享文件夹中,然后从将其放入guest虚拟机的任何位置调用它,并可能将其放入PATH中。然后你打电话

$ /path/to/VBoxManage setextradata <guest name> \
> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"

来自您的脚本或其他任何内容。

我刚试过这个,但它没有用,但我有一种感觉,那是因为我的主持人&amp;客人是不同的操作系统,特别是Windows&amp; Linux,分别。我怀疑在dos2unix上调用VBoxManage.exe可能会有效,但我不敢尝试,因为它可能会破坏VirtualBox。不过,它可能对你有用。