Я часто использую несколько «консолей» на своих виртуальных машинах -одну для интерактивной консоли, показывающую загрузку -и заканчивающуюся приглашением для входа в систему, а другую для записи всего этого в текстовый файл (обычно/var/lib/libvirt/consoles/<domain>.log
)
Я не знаю, можно ли иметь несколько интерактивных «консолей» на виртуальной машине, но вы можете добавить столько последовательных портов, сколько захотите, а затем запустить getty
на них в виртуальной машине для приглашения на вход.
Эти последовательные порты в виртуальной машине могут быть подключены, например, к файлу, сокету или порту TCP на узле, использующем протокол telnet
. Вероятно, проще всего работать с портом telnet.
напр. чтобы добавить последовательный порт ttyS1, к которому можно получить доступ через telnet
, сохраните следующий фрагмент XML в/tmp/serial1.xml
:
<serial type='tcp'>
<source mode='bind' host='127.0.0.1' service='4555' tls='no'/>
<protocol type='telnet'/>
<target port='1'/>
<alias name='serial1'/>
</serial>
Затем запустите virsh attach-device --config <domain> /tmp/serial1.xml
.
Это добавит к виртуальной машине устройство с последовательным портом, которое будет активировано при следующем перезапуске виртуальной машины. (Может быть какой-то способ добавить его как USB-устройство -с возможностью «горячего» подключения, а не последовательный порт USB без -и избежать необходимости перезапускать виртуальную машину. Я никогда не интересовался этим ).
После перезагрузки виртуальной машины запустите getty для порта. например. с помощью sysvinit отредактируйте /etc/inittab
и запустите telinit q
.
С помощью systemd:
systemctl enable getty@ttyS1.service
systemctl start getty@ttyS1.service
Чтобы подключиться к последовательному порту виртуальной машины с хоста KVM, запустите telnet 127.0.0.1 4555
.
Вы можете создать столько последовательных портов, сколько захотите, каждый из которых будет прослушивать другой порт. Просто измените номер TCP-порта (service=
), целевой порт и псевдоним во фрагменте XML.
Если вам нужен доступ к нему с другой машины, вы можете заставить его прослушивать другой IP-адрес (, хотя вы, вероятно, хотите tls='yes'
в этом случае, и использовать клиент tls -с поддержкой telnet
для connect, для чего потребуется настроить сертификат для использования qemu ).
Например, я добавил два последовательных порта в виртуальную машину Debian Stretch:
Во-первых, ttyS1 на локальном хосте :4555
$ telnet localhost 4555
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS1
stretch login:
telnet> quit
Connection closed.
Затем ttyS2 на локальном хосте :4556
$ telnet localhost 4556
Trying 127.0.0.1...
Connected to localhost.mydomain.
Escape character is '^]'.
Debian GNU/Linux 9 stretch ttyS2
stretch login:
telnet> quit
Connection closed.