Авторизация
Войти в CLI можно двумя способами: через браузер или передав готовый токен. Первый подходит, когда вход выполняет человек, второй — CI и агентам, где подтверждать некому. Типы токенов, скоупы и настройка доступа описаны в руководстве Авторизация.
Вход через браузер
CLI покажет адрес и код подтверждения, откроет браузер и будет ждать. Введите код на открывшейся странице и подтвердите доступ — в терминале появится, под кем вы вошли.
Код нужно ввести руками: ссылку с уже подставленным кодом CLI не печатает, потому что такая ссылка работает как фишинг, если переслать её на чужое устройство. Код заодно кладётся в буфер обмена.
На экране подтверждения показан список запрашиваемых прав — выбирать из него нельзя. CLI запрашивает весь каталог, но выдаётся только то, что доступно вашей роли: набор фиксируется в момент подтверждения и дальше не меняется, даже если роль изменится. Что в итоге выдано, показывает pachca auth status.
Токен такого входа живёт час и продлевается сам: перед каждой командой CLI проверяет срок и при необходимости обновляет токен. Когда параллельно работает несколько процессов (частый случай у агентов), обновляет только один из них, остальные дожидаются результата.
Флаг --no-browser печатает адрес и код, но браузер не открывает — для машин без графической среды.
Под капотом — стандартный вход по коду устройства (OAuth 2.0 Device Authorization Grant, RFC 8628). CLI не открывает локальный порт и не принимает редирект, поэтому одинаково работает на ноутбуке, в SSH-сессии и в контейнере.
Где хранится токен
Токен уходит в хранилище ключей операционной системы: Keychain на macOS, Secret Service на Linux, Диспетчер учётных данных на Windows. Файл конфигурации хранит только имя, почту и права — секрета в нём нет.
Это касается обоих способов входа. Готовый токен, переданный через --token, хранится там же, и для него это важнее: он бессрочный, поэтому утёкшее значение не протухнет само.
Так сделано потому, что прав 600 на файле недостаточно: они закрывают доступ другим пользователям машины, но не коду, работающему от вашего имени, а сегодня это обычное дело — postinstall-скрипты, расширения редактора, агенты. Известны кампании, которые прочёсывают домашний каталог в поиске именно таких файлов.
Где лежит токен, показывает pachca auth status:
Если хранилища нет — headless-машина, контейнер, минимальный образ, — CLI сохранит токен в файл и скажет об этом прямо при входе. Отказаться от хранилища можно и вручную: флагом --insecure-storage при входе или переменной PACHCA_SECRET_STORE=file для всех команд.
~/.config/pachca/config.toml. Файл читается так же, как любой другой: у всех, кто имеет доступ к вашей учётной записи на машине, есть и доступ к API от вашего имени.Токен привязан к машине, на которой выполнен вход: скопированный на другую машину профиль не заработает — секрет остался в хранилище исходной. Если запись в хранилище пропала или оно заблокировано, auth status покажет это, а любая команда попросит войти заново.
Вход готовым токеном
Получить токен можно в интерфейсе: Настройки > Автоматизации > API.
- вместо значения читает токен из потока ввода. Так секрет не попадает ни в историю оболочки, ни в список процессов, где его видят другие пользователи машины. Для готового токена это важнее, чем для любого другого: он бессрочный, поэтому утёкшее значение не протухнет само.
Передать значение аргументом тоже можно — короче для разовой настройки, но след останется в обоих местах:
Такой токен не обновляется. Это единственный путь для CI и скриптов: без человека у терминала подтвердить вход в браузере невозможно, поэтому pachca auth login без --token в неинтерактивном режиме сразу отвечает ошибкой.
Состояние входа
pachca auth status показывает, каким способом выполнен вход, сколько осталось до истечения токена и какие права выданы:
Если команда вдруг начала отвечать 403, начинать разбор стоит отсюда.
Список прав здесь — тот, что был получен при входе, и сам он не обновляется. Разойтись с действительностью он может по разным причинам: у входа через браузер набор определяется ролью и замирает в момент подтверждения, а права готового токена вы могли изменить в настройках токена уже после того, как передали его CLI. Флаг --remote спрашивает права у сервера и, если они разошлись, обновляет сохранённые:
Профили
CLI поддерживает несколько профилей — удобно, если вы работаете с персональным токеном и токенами ботов одновременно:
pachca auth logout удаляет профиль с этой машины. Что при этом происходит с самим токеном, зависит от способа входа:
- Вход через браузер. Токен гасится на сервере сразу — доступ закрывается в момент выхода, а не по истечении срока. Если сервер в этот момент недоступен, CLI об этом скажет: профиль всё равно удаляется, а токен доживает свой час. В списке токенов в Автоматизации > API такая сессия не появляется: она принадлежит приложению «Pachca CLI», а не вам.
- Готовый токен. Продолжит работать — он бессрочный. Удалите его в Автоматизации > API, если он больше не нужен.
Приоритет токена
При выполнении команды CLI определяет токен в следующем порядке:
- Флаг
--token— разовое использование, без сохранения - Переменная
PACHCA_TOKEN— удобно для CI - Флаг
--profileили переменнаяPACHCA_PROFILE— конкретный профиль - Активный профиль — выбранный через
pachca auth switch
CI и агенты (headless)
Если вы в терминале — pachca auth login сохраняет токен в профиль один раз, дальше команды работают без флагов.
Если подключаете агента или настраиваете CI — не сохраняйте токен в файл: передавайте PACHCA_TOKEN через переменную окружения (или --token для разового вызова). Это headless-путь: ничего не пишется на диск, токен берётся из секретов CI/агента. Не коммитьте токен в репозиторий.
Отказ по правам
Если нужного права нет, команда отвечает 403 и называет само право. API проверяет два условия на каждом вызове: право должно быть у токена и его должна давать текущая роль владельца. Отказ означает, что не выполнилось одно из двух, и починка у них разная.
Какое именно — видно в списке прав токена (pachca auth status).
Право в списке есть. Значит его перестала давать роль — она изменилась после того, как токен был выдан. Помочь может только администратор пространства, повторный вход бесполезен.
Права в списке нет. Дальше зависит от способа входа:
- Вход через браузер — набор прав определяется ролью в момент подтверждения и дальше не меняется. Если роль с тех пор расширили, войдите заново: новый токен получит новые права.
- Готовый токен — права выбираются при выпуске, поэтому выпустите токен с нужным набором.
В -o json то же самое приходит машиночитаемо: тип ошибки PACHCA_SCOPE_ERROR и поле scope с недостающим правом.