IT Traveler

Заметки одного системного администратора
  • Главная
  • Windows
  • Linux
  • Web/Cloud
  • Виртуализация
  • Сети
  • Поддержать автора

В VMware, с помощью Powercli, есть возможность запускать команды внутри гостевых ОС с помощью командлета Invoke-VMScript , это очень удобно, ведь с помощью этого механизма можно выполнить необходимые команды на сотне VM, не открывая на них консоль.

Работая с KVM мне захотелось найти аналог данного механизма, чтобы запускать команды из консоли гипервизора порямо на гостевых ОС, по аналогии с VMware.

В данной статье мы рассмотрим как использовать qemu агент для выполнения задуманного.

Для начала установите qemu агент, взять его можно по ссылке

Для установки в Linux используйте слеющие команды:

apt-get install qemu-guest-agent
yum install qemu-guest-agent

После установки агента внутри виртуальной машины, нужно активировать его поддержку в настройках VM, вот так активированный агент для VM выглядит в Proxmox:

Если вы используете libvirt, то xml код будет примерно такой:

<channel type='unix'>
   <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
</channel>

Теперь включите VM, с помощью команды qm ping, можно убедиться что агент внутри VM функционирует нормально.

Если команда

qm ping 101

где 101 — это ID вашей VM, не вернула ничего — значит агент функционирует нормально.

Теперь рассмотрим как запускать команды внутри VM с windows из консоли гипервизора KVM (он же в данном случае Proxmox)

Чтобы подключиться к сессии VM, выполните команду, где 101 — ID вашей VM

socat /var/run/qemu-server/101.qga -

Теперь нам нужно передать команду внутрь гостевой ОС, команды передаются в формате JSON.

Для примера отправим команду на перезапуск гостевой ОС

{"execute":"guest-exec", "arguments":{"path":"cmd.exe","arg":["/c","shutdown", "-r", "-f"]}}

Данная команда перезагрузит вашу VM.

По аналогии можно перезагрузить VM без использования cmd:

{"execute":"guest-exec", "arguments":{"path":"shutdown.exe","arg":["-r", "-f"]}}

или например та же перезагрузка, только с помощью powershell:

{"execute":"guest-exec", "arguments":{"path":"powershell.exe","arg":["-command","restart-computer", "-force"]}}

Вот так к примеру можно запустить sysprep:

{"execute":"guest-exec", "arguments":{"path":"c:\\windows\\system32\\sysprep\\sysprep.exe","arg":["/oobe", "/generalize", "/reboot"]}}

Если вы не хотите подключаться к сессии агента, а просто отправить команду одной строкой — используйте echo и отправляйте команду в socat:

echo '{"execute":"guest-exec", "arguments":{"path":"c:\\windows\\system32\\sysprep\\sysprep.exe","arg":["/oobe", "/generalize", "/reboot"]}}' | socat /var/run/qemu-server/101.qga -

Обратите внимание что слеши и спец символы в JSON экранируются, поэтому, перед тем как отправлять команду гостю — проверьте что синтаксис корректный.

Если не уверены, то всегда можно воспользоваться командой ConvertTo-Json в Powershell, например:

'cmd.exe "с:\windows\system32\sysprep.exe /oobe"' | ConvertTo-Json

на выходе получите строку, с экранированным выводом:

"cmd.exe \"с:\\windows\\system32\\sysprep.exe /oobe\""

На этом все.

В следующей статье рассмотрим как можно автоматизировать процесс деплоя и ввода в домен AD, VM на базе KVM.

Удачной настройки!

 

 

 

 

Bash, Debian, Linux, Без рубрики, Виртуализация

Архивы

  • Февраль 2025
  • Октябрь 2019
  • Сентябрь 2019
  • Июнь 2019
  • Март 2019
  • Декабрь 2018
  • Август 2018
  • Июль 2018
  • Июнь 2018
  • Май 2017
  • Апрель 2017
  • Июнь 2016
  • Май 2016
  • Октябрь 2015
  • Август 2015
  • Июль 2015
  • Июнь 2015
  • Май 2015
  • Апрель 2015
  • Март 2015
  • Февраль 2015
  • Январь 2015
  • Декабрь 2014

Календарь

Март 2019
Пн Вт Ср Чт Пт Сб Вс
 123
45678910
11121314151617
18192021222324
25262728293031
« Дек   Июн »

Рубрики

  • Active Directory
  • Asterisk
  • Bash
  • Cisco
  • Cloud
  • Debian
  • Exchange
  • GLPI Service Desk
  • Linux
  • Office 365
  • PowerShell
  • Puppet
  • Ubuntu
  • Web
  • Web/Cloud
  • Windows
  • Windows Server
  • Без рубрики
  • Виртуализация
  • Сети

Все права защищены. IT Traveler 2025