Консоль, оболочка и SSH: три отдельные двери в одну машину
Когда машина недоступна, первый вопрос звучит так: какой дверью вы пользовались. Дверей три, и каждая зависит от разных вещей.
AtlasPVE ·
Эта статья отвечает на
- proxmox консоль не открывается
- proxmox консоль или оболочка разница
- не подключается ssh к vm proxmox
- потерян доступ после смены сети
- proxmox ошибка 401 no ticket
Машина недоступна. Прежде чем паниковать, задайте один вопрос: какой дверью вы пользовались?
В одну и ту же машину ведут три отдельные двери, и каждая зависит от того, что именно живо. Понимание того, какая закрылась, сразу указывает, где проблема.
Три двери
Консоль. Это взгляд на экран и клавиатуру машины. Аналог того, как подойти к физическому серверу и подключить монитор. Сеть гостя она не использует, она идёт через хост.
Оболочка. Это набрать команду и получить вывод. Она не изображает экран, она напрямую открывает командный канал.
SSH. Это служба, работающая внутри гостя. Ей нужна сеть, ей нужна запущенная служба, ей нужны учётные данные.
Правило: чем удобнее дверь, тем больше частей гостя должно работать
SSH удобнее всего. Вы подключаетесь из своего терминала, копирование работает, файлы переносятся. Взамен требуется больше всего: настройка сети должна быть верной, интерфейс поднят, служба запущена, брандмауэр разрешает, ключ или пароль действителен. Стоит порваться одному звену цепи, и дверь закрывается.
Консоль наименее удобна. Вы смотрите на экран в браузере, а копирование обычно неуклюже. Взамен она почти ничего не требует: сеть гостя может быть сломана, брандмауэр может блокировать всё, SSH может быть вообще не установлен, а экран всё равно появится. Потому что этот экран приходит от хоста, а не из сети гостя.
Поэтому консоль и есть путь восстановления. Не потому, что она удобна, а потому, что зависит от очень немногого.
Классический случай
Вы меняете сетевую настройку. Применяете её. Связь падает и не возвращается.
Сделанное вами могло быть даже верным: иногда настройка правильная, а сессия просто умирает, пока интерфейс переключается. Но теперь машина недоступна по сети, а чтобы починить, до неё как раз нужно добраться.
Вы открываете консоль, появляется экран, вы правите настройку. Поскольку она никогда не шла по сети, сломанная сеть её не задела.
Отсюда практическая привычка: убедитесь, что консоль открывается, прежде чем трогать сетевую настройку. Делайте рискованную работу, уже держа в руках рабочий путь восстановления, а не ищите его потом.
Со стороны оболочки контейнер и виртуальная машина не одно и то же
Это различие удивляет многих, ведь в панели они стоят рядом и предлагают одну и ту же кнопку.
В контейнер хост может войти напрямую. Контейнер разделяет ядро хоста, поэтому процессы внутри для хоста уже видимы. Хост может выполнить там команду и ничего не просит у внутренней стороны.
В виртуальной машине так не выходит. Виртуальная машина это запечатанная коробка: хост видит её диск и память как блоки и не знает, что внутри. Протолкнуть команду внутрь коробки хост не может.
Единственный путь внутрь состоит в том, чтобы что-то внутри коробки слушало. Гостевой агент это ровно оно: небольшая служба, установленная внутри виртуальной машины, которая принимает запросы хоста и отвечает на них. Если её нет, двери оболочки для этой виртуальной машины не существует, и это не поломка, а следствие архитектуры.
По той же причине оболочка не работает, пока виртуальная машина выключена. Слушать некому. Консоль же покажет экран и выключенной машины, а когда вы её включите, вы увидите происходящее с первой секунды.
У консоли тоже есть предел
Честно говоря, консоль не волшебная.
Если выключен сам хост, закрыты все три двери. Консоль идёт через хост, поэтому уходит вместе с ним.
И ещё: консоль даёт экран, а не файлы. Если нужно вынести файл наружу, консоль плохой инструмент. Хороша для восстановления, а не для повседневной работы.
Наконец, доступ к консоли это отдельное право. То, что пользователь может читать панель, не значит, что ему можно смотреть на экраны машин, и это разделение сделано намеренно: экран показывает содержимое выполняемой работы.
Что делает Atlas
Atlas открывает консоль со своего экрана, не требуя второго входа. Звучит мелко, но за этим стоит история, которую стоит рассказать честно.
Консоль на самом деле живёт по собственному адресу панели Proxmox. Atlas находится по другому. Для браузера это два разных сайта, и сессия одного сама собой не переходит на другой. Если ничего не предпринять, пользователь, нажавший кнопку консоли, получает ошибку об отсутствии сессии, и его просят войти в панель второй раз.
Первое решение было таким: передать сессию панели изнутри невидимой рамки. Оно работало. Затем браузеры ужесточили правила для сторонних файлов cookie, и оно перестало работать. Ошибки в коде не было; сдвинулась почва под ним.
Второе решение осталось, потому что оно устойчивее: консоль отдаётся с собственного адреса Atlas. Браузер видит один сайт, передавать нечего, и проблема исчезает у истока.
Две мелкие, но честные детали: заголовки, устанавливающие файлы cookie, в ответах панели удаляются, поэтому Atlas не накапливает cookie панели на своём адресе. А соединение с панелью остаётся внутри машины и в сеть не выходит.
Общий вывод, независимый от продукта: работавшее решение, переставшее работать, не всегда означает ошибку. Иногда меняется допущение, на которое вы опирались. Долговечно то решение, которое опирается на меньшее число допущений.
Источники
Собственная документация Proxmox. На английском, и последнее слово в этом вопросе за ней.