Перейти к содержанию

Консоль ВМ с локального компьютера

Консоль помогает войти в Альт или EcoRouter, даже если внутри ВМ сломаны IP, маршруты, SSH или firewall. Нужны доступ к самому Proxmox, разрешение на нужную ВМ и учётная запись гостевой ОС.

Способ Что открывается Нужна сеть гостя
Браузер → noVNC Виртуальный монитор/клавиатура Нет
Браузер → xterm.js Последовательная консоль Нет
SSH к Proxmox → qm terminal Та же последовательная консоль Нет
SSH к IP гостя Сетевая сессия ОС/CLI Да

Пароль Proxmox и пароль ОС ВМ — разные реквизиты. Доступ к serial не обходит гостевую аутентификацию. Не подключайтесь к ВМ другого студента по предполагаемому VMID.

1. Консоль через браузер

На локальном компьютере:

  1. Откройте https://PROXMOX:8006, где PROXMOX — адрес выданного стенда.
  2. Для внутреннего/самоподписанного сертификата сверяйте fingerprint доверенным каналом, не принимайте неизвестный сертификат вслепую.
  3. Войдите, выберите узел Proxmox → свою ВМ → Консоль.
  4. В меню типа консоли выберите noVNC для виртуального монитора либо xterm.js для настроенного последовательного порта. В разных версиях меню расположено рядом с кнопкой «Консоль» или в её выпадающем списке.

Нужны как минимум видимость ВМ и право VM.Console; изменение оборудования требует дополнительных прав. Для ноVNC нужен графический адаптер, для xterm.js — serial-порт и вывод гостя на него. Если GUI показывает логин, используйте учётную запись гостевой ОС, не браузерный логин Proxmox.

Если открывается интерфейс Proxmox, но консоль не соединяется, проверьте поддержку WebSocket на промежуточном web proxy/VPN. Не выставляйте отдельный VNC/serial TCP-порт в Интернет и не выключайте аутентификацию.

2. SSH к Proxmox и qm terminal

Команды подходят для терминала Linux/macOS и PowerShell Windows с установленным OpenSSH. Замените PROXMOX и имя пользователя на выданные значения.

На локальном компьютере:

ssh root@PROXMOX

На узле Proxmox, где находится ВМ:

qm list
read -r -p 'VMID вашей ВМ: ' VMID
qm status "$VMID"
qm config "$VMID"
qm terminal "$VMID" --iface serial0

qm выполняется с правами root на гипервизоре, не внутри гостя. Учётная запись с правами в web-интерфейсе не обязательно имеет SSH-доступ или sudo. Для обычного SSH-пользователя используйте согласованный администратором sudo qm ...; не выдавайте ему неограниченный sudo ради удобства.

Для подключения одной командой с локального компьютера (1234 замените на собственный проверенный VMID):

ssh -t root@PROXMOX 'qm terminal 1234 --iface serial0'

-t выделяет интерактивный терминал. При автоматизации из процесса без собственного tty может понадобиться -tt. Если команду вводите уже в SSH-сессии Proxmox, повторное SSH не нужно.

После открытия нажмите Enter: приглашение может не перерисоваться само. Входите пользователем ОС. На EcoRouter появится CLI маршрутизатора, не Linux shell.

Выход из qm terminal: Ctrl+O, без Enter. Это значение по умолчанию, подтверждённое qm help terminal; флаг --escape может его изменить. После двухшагового подключения вернётесь в shell Proxmox; после одной SSH-команды — в локальный терминал. exit внутри ВМ завершает гостевую сессию, но не обязательно отключает сам serial.

3. Добавить serial-порт в Proxmox

Это подготовка стенда, а не обязательный критерий экзамена. На студенческой ВМ во время оценивания изменение выполняется только с разрешением. Сначала обеспечьте работающую noVNC-консоль или другой путь восстановления.

Проверить исходное состояние

На Proxmox определите правильный VMID, прочитайте qm config "$VMID", сохраните конфигурацию в приватный файл и запишите текущее состояние/параметры VGA/serial. Конфигурация cloud-init может содержать секреты; не публикуйте её целиком.

Если уже есть serial0, выясните его назначение. Не заменяйте существующий физический /dev/... или используемый порт без согласования. qm terminal поддерживает serial0–serial3; указание --iface исключает выбор не того порта.

Вариант через браузер

На остановленной ВМ: Оборудование → Добавить → Последовательный порт → порт 0. После добавления ожидается serial0 с типом socket. Если оборудование помечено как ожидающее применение, нужен полный останов/запуск, а не только reboot гостя.

Вариант через SSH

На Proxmox, только после проверки и при отсутствующем serial0:

qm shutdown "$VMID" --timeout 90
qm status "$VMID"
# Продолжайте только при status: stopped.
qm set "$VMID" --serial0 socket
qm config "$VMID"
qm start "$VMID"

Если shutdown не удался — выясните причину, не переходите автоматически к qm stop. У рабочего стенда сначала согласуйте завершение заданий и порядок NFS/backup-зависимостей.

Не меняйте vga на serial0. Для server-only образа такое решение возможно, но HQ-CLI с графическим браузером потеряет нужный виртуальный монитор. Добавление serial0 само по себе не требует отключать существующий VGA.

socket — локальная связь QEMU с консолью Proxmox, а не публичный TCP-сервис. Никакого проброса порта для serial не требуется.

4. Настроить приглашение входа в Альт

Следующие команды выполняются в гостевой Альт, от root через имеющуюся noVNC-консоль/разрешённый SSH. Это не команды EcoRouter.

cat /etc/os-release
ls -l /dev/ttyS0
systemctl status serial-getty@ttyS0.service --no-pager
systemctl is-enabled serial-getty@ttyS0.service
systemctl status getty@ttyS0.service --no-pager

Зафиксируйте исходное enabled/disabled/runtime/masked состояние. Первый эмулируемый serial-порт PC обычно ttyS0; сопоставьте его с выбранным serial0, не подставляйте ttyS0 для другого оборудования автоматически.

В некоторых образах уже включён getty@ttyS0.service. Если вход работает через него, второй getty не нужен. Для перехода на serial-getty сначала согласуйте замену, сохраните исходное состояние и выполните systemctl disable --now getty@ttyS0.service. Не запускайте две службы на одном tty.

Если serial-getty доступен, другой getty не занимает ttyS0 и unit не замаскирован намеренно политикой безопасности:

systemctl enable --now serial-getty@ttyS0.service
systemctl status serial-getty@ttyS0.service --no-pager

Это включает приглашение входа и его запуск при загрузке. Уже сейчас, без изменения GRUB, можно открыть qm terminal, нажать Enter и войти. systemd также может запускать getty автоматически по параметру console= ядра; явное enable устраняет зависимость только от generator.

Если unit masked, сначала выясните причину. systemctl unmask serial-getty@ttyS0.service разрешён только после отдельного согласования, а не как универсальный первый шаг.

В проверенном Альт p11 стандартный serial-getty работал без изменения скорости unit. При нечитаемом выводе проверьте реальную скорость/настройки agetty; не заменяйте штатный unit наугад. Не отключайте PAM/пароли для входа через консоль.

5. Вывод загрузки ядра и меню GRUB в serial

getty даёт вход после загрузки; настройки ядра и GRUB дают вывод во время загрузки. Это отдельные задачи. Для восстановления сети одного getty обычно достаточно.

Определить конфигурацию и сделать копии

В проверенном Альт p11:

  • исходная конфигурация — /etc/sysconfig/grub2;
  • /etc/default/grub — symlink на неё;
  • итоговый файл — /boot/grub/grub.cfg;
  • генератор — grub-mkconfig.

Для другого образа проверьте фактические пути, тип загрузчика и поддерживаемую команду; не применяйте пути BIOS/UEFI вслепую. Конфигурация UEFI может отличаться. Не редактируйте итоговый grub.cfg вручную и не запускайте grub-install для включения serial.

В Альт:

ls -l /etc/default/grub /etc/sysconfig/grub2
command -v grub-mkconfig
grep '^GRUB_AUTOUPDATE_CFGNAME=' /etc/sysconfig/grub2
ls -l /boot/grub/grub.cfg
BACKUP=$(mktemp -d /root/serial-console-backup.XXXXXX)
cp -a /etc/sysconfig/grub2 "$BACKUP/grub2"
cp -a /boot/grub/grub.cfg "$BACKUP/grub.cfg"
printf 'Сохраните путь к копиям: %s\n' "$BACKUP"

Добавить параметры ядра, не удалить существующие

Откройте /etc/sysconfig/grub2 в редакторе. В действующей GRUB_CMDLINE_LINUX_DEFAULT сохраните все существующие параметры и добавьте:

console=tty0 console=ttyS0,115200n8

Например, если было panic=30, итог:

GRUB_CMDLINE_LINUX_DEFAULT='panic=30 console=tty0 console=ttyS0,115200n8'

Это пример, не замена вашей строки. Сохраните root/UUID/net.ifnames и остальные параметры. Проверьте также GRUB_CMDLINE_LINUX: не оставляйте конфликтующих повторов console=. tty0 сохраняет вывод на виртуальном мониторе, ttyS0 добавляет serial 115200 baud, 8 data bits, no parity. Последняя консоль влияет на выбор /dev/console; необходимость этого порядка подтверждена в тестовой ВМ.

Меню GRUB — необязательно для простого входа

Для вывода самого загрузочного меню используйте по одному определению следующих переменных, сохраняя оба терминала:

GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"
GRUB_TERMINAL_INPUT="console serial"
GRUB_TERMINAL_OUTPUT="console serial"

Перегенерировать и проверить

В проверенном Альт:

grub-mkconfig -o /boot/grub/grub.cfg
grep 'console=ttyS0' /boot/grub/grub.cfg

Если генератор завершился ошибкой — не перезагружайте, проверьте конфигурацию и при необходимости восстановите сохранённый исходник. Не считать один grep успешным обновлением: нужен успешный exitcode генератора.

С согласованным разрешением перезагрузите гостя, лучше заранее открыв serial для наблюдения загрузки. Затем в госте:

cat /proc/cmdline
systemctl is-active serial-getty@ttyS0.service
systemctl is-enabled serial-getty@ttyS0.service

В /proc/cmdline должны быть нужные console=, а getty должен быть active. После полного выключения/старта повторите вход через serial и проверьте, что noVNC всё ещё открывает виртуальный монитор.

6. EcoRouter

На стороне Proxmox serial-порт добавляется аналогично. Однако внутри EcoRouter используются настройки и CLI его версии/образа, а не systemctl, GRUB и Linux shell.

  1. Через уже работающую консоль определите версию (show version, если команда поддерживается).
  2. Проверьте руководство этого образа: какой эмулируемый порт используется, включён ли вывод по умолчанию, нужна ли отдельная настройка CLI/скорости.
  3. На Proxmox добавьте нужный serialN; сохраните VGA как резервный путь.
  4. Откройте qm terminal VMID --iface serialN или xterm.js, нажмите Enter.
  5. Войдите штатной учётной записью и проверьте read-only CLI, затем сохранение после согласованного холодного запуска.

Граница проверки: в доступных ISO-каталогах обследованных Proxmox образ EcoRouter не найден. Настройка гостевой serial-консоли EcoRouter на живом образе пока не проверена; универсальная команда её включения не заявляется. Для завершения этой ветки нужен предоставленный образ/стенд и версия. Не менять configuration или сохранять running-config студента только ради подключения проверяющего.

7. Сетевой SSH и промежуточный переход

Если гостевая сеть работает, вместо консоли можно подключиться непосредственно. На локальном компьютере, для сервера с требуемым заданием портом 2026:

ssh -p 2026 sshuser@GUEST_IP

Если IP доступен только с Proxmox и SSH forwarding разрешён:

ssh -J admin@PROXMOX -p 2026 sshuser@GUEST_IP

Для EcoRouter подставьте фактический порт и его пользователя. Не ожидайте Linux shell. При ProxyJump сверяются fingerprints и гипервизора, и гостя. Это не serial-консоль: не работает при сломанной сети/SSH гостя и не показывает загрузку ОС.

8. Диагностика

Симптом Что проверить
Нет serial в qm config Правильный VMID/узел, наличие serialN; добавление требует согласования
qm terminal сообщает, что нет подходящего serial Для выбранного serialN нужен socket; явно задать --iface
ВМ остановлена qm status; запускать только свою ВМ с разрешением
Пустой экран после Enter getty/вывод CLI в госте, правильный порт, состояние службы; один socket не даёт login
Видна загрузка, нет приглашения serial-getty/PAM/guest console policy, а не параметры сети
Login есть, пароль не подходит Используется пароль гостя? Разрешён ли этот пользователь на консоли? Не отключать аутентификацию
Нечитаемые символы tty/номер порта и согласованная скорость GRUB/kernel/getty/образа
Нет boot-сообщений, но вход работает getty настроен, но kernel/GRUB ещё нет; для обычного входа это допустимо
Изменение serial pending Штатное полное выключение/запуск при согласованном окне
Через web нет соединения Права VM.Console, WebSocket, выбранный тип console, TLS/прокси
Через SSH нет прав qm SSH/sudo-права на гипервизоре, не права пользователя внутри ВМ
Консоль занята/вывод перемешан Закрыть свой предыдущий сеанс; не убивать чужие процессы/сеансы

9. Возврат исходного состояния

Откат выполняется из резервной рабочей консоли по сохранённым исходным данным, а не универсальным «удалить всё»:

  1. В Альт восстановить сохранённый исходный /etc/sysconfig/grub2, перегенерировать фактический grub.cfg и проверить успех.
  2. Вернуть исходное состояние getty. Если persistent enable создали только вы и до этого unit был disabled, удалить именно своё включение; учесть systemd generator — оставленный console= может запускать getty автоматически.
  3. При необходимости штатно выключить ВМ. Удалить только serial-порт, который добавляли вы: на Proxmox qm set "$VMID" --delete serial0. Исходный существующий порт не удалять.
  4. Сохранить прежний VGA, запустить ВМ и проверить noVNC/штатную загрузку.

Не удалять пользовательские backups, не откатывать учебную работу студента к шаблону. Снимок ВМ — отдельное разрешение, не обязательная часть настройки serial.

10. Результаты практической проверки

Проверка проводится на отдельной ВМ console-test-alt, VMID9900, без сетевых карт, с VGA std. Эталонные 101–106/201–206 не изменяются. Наследованные serial-настройки шаблона сначала убираются, чтобы не принять преднастройку за результат инструкции.

Протокол: evidence/console-access/serial-acceptance.json, текст serial-сеансов и подтверждения браузера в том же каталоге. Итог и границы проверки описаны в протоколе консольного доступа.