在没有 SSH 的情况下在虚拟机上运行命令的最佳方法

在没有 SSH 的情况下在虚拟机上运行命令的最佳方法

我想在虚拟机上运行命令并在没有 SSH 的情况下获取输出,因为虚拟机将运行一些网络测试,这可能会导致接口关闭,并且 IP 可能并非始终可用。通过 /dev/pts/X 实现此目的的最佳方法是什么?

我可以通过以下方式运行任何命令

echo "some command" > /dev/pts/2   (or /dev/pts/4 with virtio)

并在虚拟机上看到它(使用 virt-manager),但我不知道如何捕获输出,要等待多长时间才能完成命令执行以及它的返回代码...有什么提示吗?

这是我的虚拟机的 XML 摘录:

<serial type='pty'>
  <source path='/dev/pts/2'/>
  <target type='isa-serial' port='0'>
    <model name='isa-serial'/>
  </target>
  <alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/2'>
  <source path='/dev/pts/2'/>
  <target type='serial' port='0'/>
  <alias name='serial0'/>
</console>
<console type='pty'>
  <source path='/dev/pts/4'/>
  <target type='virtio' port='1'/>
  <alias name='console1'/>
</console>
<channel type='pty'>
  <source path='/dev/pts/3'/>
  <target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
  <alias name='channel0'/>
  <address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>

答案1

以下方法有很多缺点,可能无法正常工作,不安全:(受本文启发如何在 VirtualBox 中从客户机使用主机串行端口

要求:

  • 油灰或任何可以在 TCP 套接字中发送原始字节的程序
  • 虚拟盒或任何虚拟机管理程序
  • root 用户密码

程序:

  • 在 Linux VM 中安装 VirtualBox 客户机附加组件。将其关闭。
  • 转到 VirtualBox 中的 VM 设置 → 打开“串行端口”部分 → 选中端口 1 中的“启用串行端口”→ 端口号 COM1 → 端口模式 TCP → 取消选中“连接到现有”→ 设置路径/地址任何未分配的 TCP/IP 端口号,例如 1234。

VirtualBox 串行端口设置

  • 启动该 VM。sudo cat /dev/ttyS0 | sh在 VM 中运行此命令。此命令在 VM 中打开串行设备,将输出传送到 shell 以运行它。
  • 在主机操作系统端,打开 Putty → 在连接类型中选择 RAW 模式 →localhost在 VM 设置中输入主机名和以前的端口号,例如 1234。或者运行此命令putty -raw localhost -P 1234
  • 现在在 putty 窗口中输入任何内容,它将在 VM 的 shell 中执行。

COM 端口和串行设备可以更改,并根据此进行映射VirtualBox 手册

相关内容