Сегодня использование виртуальных машин повсеместно. Кто-то на них держит продакшн-сервисы, кто-то тестовые хосты, кто-то раскатывает на них лабораторные работы.
Я сижу на 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
Передаем ядру параметр вывода в ttyGRUB_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-хоста.
Комментарии (10)
litos
19.11.2022 09:58Чем не устраивает подключение к виртуальной машине через VNC? Я имею ввиду тот, что встроен в гипервизор KVM естественно.
Если не работает ssh, то надо его чинить, равно как и сеть (и как раз VNC поможет), а остальное уже полумеры
(Ну это как правило, сценарии использования могут быть разные, может вообще сеть кому-то не нужна)
sdnv Автор
19.11.2022 23:55Как вариант, кстати. Попробую настроить и VNC, в идеале - через SSH-туннель
estet
nemu - вот это действительно легко.
sdnv Автор
Крутая штука, будет интересно глянуть!