Подключение к виртуальным машинам#

Для взаимодействия с ВМ в ОС SberLinux OS Server используется терминал SSH. В случае, если ВМ недоступна из системы по сети, можно воспользоваться консолью virsh.

Если ВМ, к которым необходимо подключиться, находятся на удаленном хосте, существует возможность настроить систему для более удобного доступа к ним. Подробнее в разделе «Настройка упрощенного доступа к удаленным хостам виртуализации».

Подключение к виртуальной машине с использованием SSH#

Для взаимодействия с терминалом ВМ по протоколу SSH выполните приведенный ниже сценарий.

Перед подключением проверьте, что:

  • у пользователя есть сетевое подключение и полномочия администратора (например, root) для доступа к целевой ВМ.

  • если целевая ВМ расположена на удаленном хосте, есть подключение и полномочия администратора (например, root) для доступа к данному хосту.

  • сеть ВМ назначает IP-адреса с помощью dnsmasq, сгенерированного libvirt. Требуется, например, в сетях libvirt NAT.

    Внимание

    Подключиться с помощью SSH к ВМ невозможно, если используется одна из следующих сетевых конфигураций:

    • hostdev-интерфейсы;

    • direct-интерфейсы;

    • bridge-интерфейсы.

  • компонент libvirt-nss установлен и включен на хосте ВМ. В ином случае выполните следующие действия:

    1. Установите пакет libvirt-nss:

      dnf install libvirt-nss
      
    2. В файл /etc/nsswitch.conf к строке hosts добавьте libvirt_guest:

      ...
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      ...
      

Для подключения к удаленной ВМ выполните следующие шаги:

  1. Подключитесь по SSH к соответствующему физическому хосту:

    ssh root@<IP_address>
    

    Команда выше выполняет подключение к хосту с IP-адресом <IP_address> с использованием учетных данных пользователя с полномочиями администратора root.

    Команда запросит пароль при подключении:

    root@<IP_address>'s password:
    

    И выведет следующую информацию при успехе:

    Last login: Mon Sep 24 12:05:36 2025
    
  2. Подключитесь к ВМ, используя ее имя и учетные данные доступа пользователя:

    ssh root@<example-vm>
    

    В примере выше осуществляется подключение к ВМ <example-vm> с учетными данными пользователя с административными полномочиями root.

    Пример вывода команды, включая запрос пароля:

    root@<example-vm>'s password:
    Last login: Wed Sep 12 12:05:36 2023
    

Устранение ошибок#

Если имя ВМ неизвестно, выведите список всех ВМ, доступных на хосте, используя команду virsh list --all:

virsh list --all

Пример вывода команды:

Id    Name                           State
----------------------------------------------------
2     <example-vm-1>                 running
-     <example-vm-2>                 shut off

Открытие последовательной консоли виртуальной машины#

К последовательной консоли ВМ можно подключиться, используя команду virsh console.

Данный вариант подключения используется, когда ВМ:

  • не поддерживает протоколы VNC и, следовательно, не использует отображение видео для инструментов с графическим интерфейсом;

  • не имеет сетевого подключения на хосте и, следовательно, не может взаимодействовать через SSH.

Перед подключением к последовательной консоли ВМ убедитесь, что:

  • Загрузчик GRUB на хосте должен быть настроен на использование последовательной консоли. Убедитесь, что файл /etc/default/grub содержит параметр GRUB_TERMINAL=serial.

  • На ВМ настроено устройство последовательной консоли, например, console type='pty'. Проверьте с помощью команды:

    virsh dumpxml <example-vm> | grep console
    

    Пример вывода команды:

    <console type='pty' tty='/dev/pts/3'>
    </console>
    

    В примере выше содержится информация о консоли ВМ <example-vm>.

  • На ВМ настроена последовательная консоль в командной строке ядра. Проверьте настройки на ВМ с помощью команды:

    cat /proc/cmdline
    

    Пример вывода команды:

    BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.14.0-427.33.1.sl9_4.2.x86_64 root=/dev/mapper/sberlinux-root ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/sberlinux-swap rd.lvm.lv=sberlinux/root rd.lvm.lv=sberlinux/swap console=ttyS0,115200n8
    

    Вывод должен содержать параметр console=ttyS0.

    Примечание

    Если последовательная консоль на ВМ настроена неправильно, команда virsh console подключится к не отвечающей гостевой консоли. Для выхода в этом случае можно использовать сочетание клавиш Ctrl+].

    Чтобы установить последовательную консоль на ВМ, выполните следующие действия:

    1. Включите на ВМ опцию ядра console=ttyS0:

      grubby --update-kernel=ALL --args="console=ttyS0"
      
    2. Очистите параметры ядра, которые могут помешать вступлению изменений в силу:

      grub2-editenv - unset kernelopts
      
    3. Перезагрузите ВМ.

  • Служба serial-getty@<console-name> должна быть включена. Проверьте статус с помощью команды:

    systemctl status serial-getty@<console-name>
    

    Где <console-name> – имя консоли.

Сценарий открытия последовательной консоли виртуальной машины#

Подключитесь к ВМ с помощью команды virsh console на соответствующем хосте:

virsh console <example-vm> --safe

Команда осуществит подключение к ВМ <example-vm> при условии, что драйвер libvirt поддерживает безопасную работу с консолью.

Пример вывода команды:

Connected to domain '<example-vm>'
Escape character is ^]

Subscription-name
Kernel 5.14.0-362.18.1.sl9_3.2.x86_64 on an x86_64

localhost login:

Взаимодействие с консолью virsh осуществляется таким же образом, как и со стандартным интерфейсом командной строки.

Настройка упрощенного доступа к удаленным хостам виртуализации#

При управлении ВМ на удаленном хосте с помощью утилит libvirt рекомендуется использовать синтаксическую конструкцию -c qemu+ssh://root@hostname/system. Например, для использования команды virsh list от имени пользователя с административными полномочиями root на хосте <IP_address>:

virsh -c qemu+ssh://root@<IP_address>/system list

Пример выполнения команды, включая ввод пароля пользователя:

root@<IP_address>'s password:

Id   Name              State
---------------------------------
1    <guest-vm>        running

Можно исключить необходимость указывать детали подключения, изменив конфигурацию SSH и libvirt. Синтаксис команды в таком случае будет выглядеть так:

virsh -c <remote-host> list

Где <remote-host> - удаленный хост, на котором необходимо управление ВМ.

Пример выполнения команды, включая ввод пароля пользователя:

<remote-host>'s password:

Id   Name              State
---------------------------------
1    <guest-vm>        running

Чтобы настроить упрощенный доступ, воспользуйтесь следующим сценарием:

  1. Отредактируйте файл ~/.ssh/config, указав следующее:

    Host <remote-host-alias>
       User                    root
       Hostname                <IP_address>
    

    Где <remote-host-alias> - псевдоним удаленного хоста root@<IP_address>.

  2. Отредактируйте файл /etc/libvirt/libvirt.conf, добавив следующее:

    uri_aliases = [
      "<qemu-host-alias>=qemu+ssh://<remote-host-alias>/system",
    ]
    

    Где <qemu-host-alias> - это псевдоним, который утилиты qemu и libvirt будут связывать с хостом root@<IP_address>.

Примечание

Если нужно использовать утилиты libvirt только на одном удаленном хосте, есть возможность установить определенное соединение в качестве целевого по умолчанию. Для этого отредактируйте файл /etc/libvirt/libvirt.conf и установите значение параметра uri_default равным qemu-host-alias:

# These can be used in cases when no URI is supplied by the application
# (@uri_default also prevents probing of the hypervisor driver).
#
uri_default = "<qemu-host-alias>"

Все команды, основанные на libvirt, будут автоматически выполняться на указанном удаленном хосте, например:

virsh list

Пример выполнения команды, включая ввод пароля пользователя:

root@<IP_address>'s password:

Id   Name              State
---------------------------------
1    <guest-vm>        running

Этот способ не рекомендуется, если требуется также управлять другими ВМ на локальном хосте или на других удаленных хостах.

Проверка настройки упрощенного доступа к удаленным узлам виртуализации#

Убедитесь, что настроено управление удаленными ВМ с помощью утилит на основе libvirt в локальной системе с добавленным параметром -c <qemu-host-alias>. Удаленное управление обеспечивает автоматическое выполнение команд по SSH на удаленном хосте.

В примере ниже приведена команда, демонстрирующая выполнение команды на удаленном хосте с учетом настройки упрощенного доступа:

virsh -c <qemu-host-alias> list

Пример выполнения команды, включая ввод пароля пользователя:

root@<IP_address>'s password:

Id   Name              State
---------------------------------
1    <guest-vm>        running

Команда осуществит подключение к удаленному хосту и выведет список ВМ.

Примечание

Кроме команды virsh, опция -c (или --connect) и настройка удаленного доступа к хосту, описанные выше, могут быть использованы командами virt-install и virt-viewer.