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

от автора

Сегодня использование виртуальных машин повсеместно. Кто-то на них держит продакшн-сервисы, кто-то тестовые хосты, кто-то раскатывает на них лабораторные работы.
Я сижу на 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 start serial-getty@ttyS0

А также добавим его в автозапуск, чтобы не приходилось стартовать сервис вручную после ребута VM.

sudo systemctl enable 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-хоста.


ссылка на оригинал статьи https://habr.com/ru/post/700196/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *