Сессии и профили
This page is in Russian.
Сессия — это токен вашего аккаунта MAX плюс устойчивая личность устройства. Токен лежит в ключнице операционной системы, всё остальное — в файле рядом с настройками.
Откуда берётся токен
max session start <способ> — четыре способа войти. Каким бы способом ни был получен токен, в
ключницу он попадает только после того, как MAX его принял.
| Способ | Что происходит | Что нужно |
|---|---|---|
token (по умолчанию) | вставить токен, выданный официальным клиентом, или подать его трубой | — |
qr | QR-код рисуется прямо в терминале; вы сканируете его приложением MAX. Узкий терминал — код откроется в браузере по умолчанию | терминал шириной от ~70 колонок, иначе любой браузер |
qr-chrome | открывается web.max.ru в отдельном окне браузера; вы сканируете его QR-код | Chrome, Chromium, Edge или Brave |
sms | то же окно web.max.ru; на странице выберите вход по номеру телефона | Chrome, Chromium, Edge или Brave |
max session start qrqr-chrome и sms — самые осторожные. Вход делает сам web.max.ru в настоящем браузере, и MAX
видит свой собственный веб-клиент. Браузер запускается с отдельным временным профилем, а не с
вашим; как только web.max.ru вошёл, окно закрывается, а профиль удаляется — и при Ctrl-C тоже.
Закрытие окна не завершает сессию: это как закрыть вкладку. Браузер ищется сам; другой можно указать
в MAX_BROWSER. Браузеры из snap не подходят — у них своя папка /tmp.
qr просит код у MAX нашим собственным соединением, изображая веб-клиент. Он работает без
браузера, но это уже не настоящий веб-клиент.
Вход по SMS — только через браузер. Когда SMS просит наше соединение, MAX требует капчу, а её можно пройти только на странице.
После любого из трёх входов в списке сессий приложения MAX появится новое устройство. Если у
аккаунта есть облачный пароль, qr спросит его без эха, до трёх раз; потом код придётся сканировать заново.
Все три требуют человека у терминала: без него команда откажет с кодом 2. Для скриптов и агентов
остаётся token. Пока задана MAX_TOKEN, они тоже откажут: она старше ключницы и перекрыла бы
новую сессию.
Токен вручную
max session start без способа импортирует токен, который уже выдан официальным клиентом —
веб-версией web.max.ru или другим клиентом, — и кладёт его в ключницу. Он работает и тогда,
когда вход упирается в капчу или в необычный второй фактор.
max session start
MAX token: ▏ # ввод не отображаетсяТокен не передаётся аргументом. Аргумент команды виден в ps любому процессу на машине и
остаётся в истории оболочки. Поэтому он спрашивается у терминала без эха — или читается из трубы,
если терминала нет:
pass show max/token | max session startДля CI и разовых запусков есть переменная. Она старше ключницы: если MAX_TOKEN задана,
берётся она, и в ключницу ничего не пишется. Фоновый сервер max serve с ней не запускается:
команда подключается к MAX сама.
MAX_TOKEN="$(cat /path/to/token)" max chats list --jsonПроверить и забыть
max account show # кто вы: id, имя, телефон
max session end # забыть токен на этой машинеsession end стирает токен локально и ничего не сообщает серверу. Сессия, открытая в
браузере, продолжает работать — это видно и в ответе:
{ "profile": "default", "forgotten": true, "revokedOnServer": false }Разница не косметическая: забытый токен, который всё ещё живёт на сервере, — это не то же самое, что отозванный.
Профили
Профиль — это отдельный аккаунт: свой токен, своё состояние, свой кэш. Называется первым словом, а не флагом:
max chats list # профиль default
max personal chats list # профиль personal
export MAX_PROFILE=personal # или на всю сессию оболочкиПравило: первое слово — это профиль, если оно не совпадает с именем команды. Поэтому профиль
нельзя назвать chats, runs или session — такое имя отвергается при создании, пока это ещё
можно объяснить. Потом max chats молча значило бы «профиль chats без команды».
Если первое слово не команда и команды за ним нет, программа не показывает справку молча, а говорит, что произошло:
"nonsense" is not a command, so it was read as a profile name — and no command followed it.
Run `max --help` for the commands, or `max nonsense account show` if "nonsense" is your profile.Где что лежит
| Что | Где |
|---|---|
| токен | ключница ОС, служба max-cli, запись — имя профиля |
| токен бота | ключница ОС, служба max-cli, запись bot:<профиль>; или MAX_BOT_TOKEN |
| чаты, которые видел бот | ~/.local/share/max-cli/bots/ |
устройство, счётчик входов, viewerId | ~/.local/share/max-cli/profiles/<профиль>.json, режим 0600 |
| настройки | ~/.config/max-cli/config.json |
Личность устройства записывается при первом же чтении, до того как будет использована. Клиент, который представляется MAX новым устройством на каждую команду, — это не подражание настоящему клиенту, и сессии на стороне сервера привязаны именно к нему.
⚠
MAX_CONFIG_DIR,MAX_STATE_DIRиMAX_CACHE_DIRпереносят и запись в ключнице: под капотом меняется имя службы. Сессия, сохранённая с этими переменными, не видна команде, запущенной без них, и наоборот. Либо ставьте их всегда, либо никогда.
Если ключницы нет
На машине без ключницы (типичный контейнер) запись не удаётся — тогда токен ложится в файл
credentials.json рядом с настройками, с правами 0600, и команда говорит об этом одной строкой
на stderr.
В CI правильнее не полагаться ни на то, ни на другое и передавать MAX_TOKEN.
Сколько живёт токен
Срок жизни токена неизвестен: MAX его не сообщает. Токен продолжает работать и после того, как
вкладка web.max.ru закрыта. Когда MAX перестаёт его принимать, войдите заново:
max session start.
max не ограничивает число входов, но считает их для каждого профиля; счётчик показывает
max doctor.
Дальше
- usage.md — первые команды
- configuration.md — настройки и порядок их разрешения
- security.md — что попадает на диск, а что не попадает никогда