Я хочу запускать команды на виртуальной машине и получать выходные данные без 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 ответ1

0

Следующий метод имеет много недостатков, может не работать должным образом, НЕ является безопасным :( Вдохновлен этой статьей Как использовать последовательный порт хоста от гостя в VirtualBox.

Требования:

  • Замазка или любая программа, которая может отправлять необработанные байты в сокет TCP
  • VirtualBox или любой гипервизор
  • пароль пользователя root

Процедура:

  • Установите гостевые дополнения VirtualBox в виртуальной машине Linux. Закрой это.
  • Перейдите к настройкам виртуальной машины в VirtualBox → откройте раздел "Последовательные порты" → Установите флажок "Включить последовательный порт" в порту 1 → Номер порта COM1 → Режим порта TCP → Снимите флажок "Подключиться к существующему" → Установите путь / адрес для любого нераспределенного порта TCP / IP номер например 1234.

VirtualBox_Serial_Port_Settings

  • Запустите эту ВМ. Запустите эту команду sudo cat /dev/ttyS0 | sh в вм. Эта команда открывает последовательное устройство в ВМ, направляет вывод в оболочку для его запуска.
  • На стороне хост-системы откройте Putty → выберите режим RAW в типе соединения → введите localhost в имени хоста и номер предыдущего порта в настройке виртуальной машины, например, 1234. Или запустите эту команду putty -raw localhost -P 1234 .
  • Теперь введите что-нибудь в окно замазки, это будет выполнено в оболочке виртуальной машины.

COM-порт и последовательные устройства могут быть изменены и отображаются в соответствии с данным руководством VirtualBox.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .