Pull to refresh

Получаем доступ к консоли VM с помощью virsh

Reading time2 min
Views15K

Сегодня использование виртуальных машин повсеместно. Кто-то на них держит продакшн-сервисы, кто-то тестовые хосты, кто-то раскатывает на них лабораторные работы.
Я сижу на Linux и для виртуализации использую KVM. Иногда у меня нет возможности подключиться к VM через ssh, также невозможно и через virt-manager

- Что делать?
- Использовать virsh console

Окей, давайте посмотрим.

virsh — утилита, из состава библиотеки libvirt, для командной строки Linux, предназначенная для управления виртуальными машинами и гипервизорами KVM и Xen.

Библиотека libvirt используется в качестве интерфейса к различным технологиям виртуализации.

Все, что нам нужно сделать - это предварительно настроить виртуальную машину

Необходимо внести изменения в параметры конфигурации загрузчика GRUB.
У меня на VM установлен Debian 11, конфиг располагается по пути /etc/default/grub

Учтите, что я все настраиваю на свежей системе, если у вас измененный конфиг GRUB, то вносите изменения вручную.
Буду делать заметки для CentOS, под командами Debian, т.к. настройка немного отличается.

Для начала сделаем бэкап конфигурации (Всегда это делаю при изменении конфигов и вам советую)

sudo cp /etc/default/grub /etc/default/grub.default

Передаем ядру параметр вывода в tty
GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"

sudo sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0"/g' /etc/default/grub

В CentOS нет строки GRUB_CMDLINE_LINUX_DEFAULT, поэтому добавим её следующей командой:

echo 'GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0"' | sudo tee -a /etc/default/grub

Раскоментируем строку включения консольного режима

sudo sed -i 's/#GRUB_TERMINAL=console/GRUB_TERMINAL=console/g' /etc/default/grub

В CentOS по-умолчанию режим уже активирован в параметре GRUB_TERMINAL_OUTPUT

Укажем настройки serial

echo 'GRUB_SERIAL_COMMAND="serial -unit=0 -speed=115200 -word=8 -parity=no -stop=1"' | sudo tee -a /etc/default/grub

Обновим GRUB

sudo update-grub

Обновление изменений GRUB в CentOS:

sudo grub2-mkconfig -o /boot/grub2/grub.cfg

Запустим и добавим в автозапуск сервис serial-getty с указанным нами ранее ttyS0

sudo systemctl enable --now serial-getty@ttyS0

Теперь можно пробовать подключиться к VM

Переходим на наш гипервизор и смотрим под каким ID/Name работает VM c помощью команды virsh list.
Стоит учесть, что лучше всего для подключений использовать Name, при перезапусках VM - ID может меняться.

┌[user@sdnv-pc]-(~)
└> virsh list
 Id   Name     State
------------------------
 9    debian   running

Пробуем зайти в консоль VM debian с помощью команды virsh console "Name" и видим сообщение о подключении.

┌[user@sdnv-pc]-(~)
└> virsh console debian
Connected to domain 'debian'
Escape character is ^] (Ctrl + ])

Нажимаем Enter, чтобы попасть в приглашение, логинимся под нашим пользователем VM и проверяем под каким tty мы зашли:

debian login: user
Password: 

user@debian: w
16:23:01 up 4 min,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
user     ttyS0    -                16:22    0.00s  0.16s  0.00s w

Все работает! Теперь можно не бояться за свои виртуалки и всегда иметь доступ к ним из KVM-хоста.

Tags:
Hubs:
Total votes 6: ↑5 and ↓1+8
Comments10

Articles