通过 SSH 连接到 Gnome Boxes 操作系统

通过 SSH 连接到 Gnome Boxes 操作系统

我收到了用于我的 CS 作业的虚拟机。我已经在 Gnome Boxes 中打开它(只需双击 VM 映像),但我不想在那里编写代码,而是在本地计算机上编写代码,然后在虚拟机上通过 ssh 进行编译。该虚拟机具有 .ova 扩展名,并且在 Boxes Preferences 中显示 Broker QEMU Session、Display Protocol SPICE。我应该使用什么作为 ssh 的远程 IP?是否需要对虚拟机进行任何其他配置?我应该如何添加它们?

答案1

最简单的方法是使用反向 SSH 隧道。

从虚拟机内部运行:

ssh -NT -R 2222:localhost:22 user@_gateway

其中user是主机中的用户名。

现在,您可以使用以下命令从主机进行连接

ssh -p 2222 guestuser@localhost

其中guestuser用户名是 guest。

如果您不想每次启动时都从来宾运行命令,则可以autossh从服务使用。

答案2

GNOME Box 提供什么功能

当您双击开放虚拟化格式文件时,GNOME Boxes 会自动导入它。

GNOME Boxes 不会将访客暴露给 SSH。预计您将拥有SPICE 嘉宾补充安装在来宾上以便能够:

  • 使用主机和来宾之间的共享剪贴板复制和粘贴文本
  • 将文件拖放到来宾中。

这种方法对于不熟练的用户来说应该是直观可理解的,他们使用 GNOME此应用程序的目标:

尽管虚拟管理器作为虚拟机管理软件,它做得非常好,它非常适合系统管理和虚拟机。另一方面,Boxes 面向典型的桌面最终用户,他们想要一种非常安全且简单的方法来尝试新操作系统或她/他最喜欢的操作系统的新(可能不稳定)版本,或者需要连接到远程计算机(家庭办公室连接是典型的用例)。因此,Boxes 没有提供许多由 virt-manager 提供的高级选项来调整虚拟机。相反,Boxes 专注于在用户输入很少的情况下让事情开箱即用。

也就是说,Boxes 与 virt-manager 项目共享了很多代码,主要形式为库虚拟机,利博信息盖姆

作为参考,有三年前不活跃的提案在 Boxes 中实现端口转发。


使用不同的工具

如果您需要通过 SSH 连接到来宾,您可能需要使用正确的工具来完成任务来配置您的设置并诉诸virt-manager.通常,可以通过配置“虚拟网络“(对于具有动态或无线接口的主机)或“桥接到 LAN“(对于具有静态有线接口的主机)。另一方面,Boxes 使用user模式网络配置来宾,该模式采用用户空间 SLiRP 堆栈。如果您愿意,您可以virt-manager修改现有设置并继续在 Boxes 中使用您的客人。我自己还没有这样做过,所以,如果您选择使用virt-manager,则需要不同的教程。


转发端口

另一种方法是指示 QEMU 将主机上的端口转发到客户机上的端口。您无法使用文本编辑器修改来宾的配置文件,因为更改将被忽略并被覆盖。您可以使用 来修改它visrh,它在软件包中可用libvirt-clients(至少在 Debian 中)。您可以在“故障排除日志”的第二行中了解域的名称,该日志位于框中的来宾“属性”的“系统”选项卡中。或者,您可以检查~/.config/libvirt/qemu.例如,在我的安装中,与已安装的来宾计算机关联的域名称是“boxes-unknown”。要编辑该机器的配置,我输入:

virsh edit boxes-unknown

我的安装中访客的现有网络配置:

    <interface type='user'>
      <mac address='52:54:00:3d:69:49'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

不幸的是,您不能仅修改 XML 以仅添加从主机到来宾的端口转发。该功能未在域 XML 格式由 所使用libvirt2013 年的一封电子邮件表明该功能的提案不成功。因此,我们需要提供相关参数,以便在启动 guest 虚拟机时传递给 QEMU。我们无法修改现有的网络接口,因此我们只需删除描述它的 XML 部分以防止创建它。相反,我们必须在要传递给 QEMU 的参数中复制它。

根据“故障排除日志”,在我的设置中,上述网络配置对应于以下参数:

-netdev user,id=hostnet0 \
-device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:3d:69:49,bus=pci.0,addr=0x3 \

您可以检查 中参数的含义man qemu-system-x86_64

我们不想复制总线和地址,因为自动配置不会考虑我们的自定义 QEMU 参数。这会导致地址分配中偶尔发生冲突,从而阻止客户机启动。相反,我们只是允许它自动分配给我们的自定义网络接口。

记住设备名称。例如,如果我不指定rtl8139,它似乎会e1000默认配置。

您需要修改<domain type='kvm'>标签以包含 QEMU 命令行元素的 XML 命名空间:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>

之后,您可以在结束标记之前添加 QEMU 命令行参数</domain>。在下面的示例中,我添加了端口转发,以便能够ssh localhost -p 2222从主机上进行端口转发,并能够http://localhost:8080从主机上的浏览器访问网络服务器。您可能需要根据您的设置和偏好修改此示例。如果需要,hostfwd可以在 中读取参数的语法man qemu-system-x86_64

  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='rtl8139,netdev=hostnet0'/>
    <qemu:arg value='-netdev'/>
    <qemu:arg value='user,id=hostnet0,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:80'/>
  </qemu:commandline>

相应的 QEMU 参数是:

-device rtl8139,netdev=hostnet0 \
-netdev user,id=hostnet0,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:80

由此生成上述 XML 并不困难,但是你也可以使用 virsh domxml-from-native qemu-argv为您量身定制。

这似乎就是我们转发端口所需要的全部根据 QEMU 维基

类似的方法也可以用于客人virt-managerhttps://unix.stackexchange.com/a/519067/423679

virsh如果抱怨错误,请不要在保存文件时跳过 XML 验证。首先尝试修复语法。不要忘记保留配置文件的备份以防万一。

相关内容