Files
ssh-access-tui/docs/ADMIN_GUIDE.md
T
2026-07-22 14:14:53 +03:00

9.8 KiB
Raw Blame History

Руководство администратора

Практическое руководство по экранам ssh-access-tui и типовым сценариям. Архитектурные решения и модель угроз — в ARCHITECTURE.md.

Запуск

sudo ssh-access-tui

Требует root (создаёт/блокирует системных пользователей, правит authorized_keys). Инструмент рассчитан на одного администратора одновременно на хосте — если кто-то ещё уже открыл TUI, вторая сессия получит ошибку про занятую блокировку состояния (state.lock), а не молча перезапишет чужие изменения.

Навигация везде: стрелки/j/k — перемещение по списку, enter — выбрать/подтвердить, esc — назад, ctrl+c — выход в любой момент.

Главное меню

Пользователи        — создать / заблокировать / разблокировать / удалить
Группы и хосты       — какие внутренние хосты кому разрешены
Экспорт архивов      — сгенерировать ключи и .7z для доставки
Аудит / кто в сети   — активные сессии и журнал подключений
Выход

Сценарий 1: новый сотрудник, у которого уже есть роль/группа доступа

Обычно сначала настраивают группу (один раз), потом заводят пользователей в неё пачками.

  1. Группы и хосты → n → ввести имя группы (например team-billing) → enter.
  2. Выбрать группу → enter, попасть в список хостов группы (изначально пуст).
  3. n → заполнить: имя хоста (короткий алиас, например db-prod-1), адрес (как виден с jump-хоста), порт, описание (необязательно) → tab между полями → enter сохранить. Повторить для каждого внутреннего хоста, который должен быть доступен этой группе.
  4. esc дважды — назад в главное меню.
  5. Пользователи → n → имя пользователя (латиницей, будущий Linux-логин) и комментарий (например ФИО) → enter.
  6. Отметить space нужные группы (можно несколько — эффективный список хостов пользователя = объединение хостов всех отмеченных групп) → enter.

Это уже создаёт системный Linux-аккаунт (без пароля, без интерактивного шелла) и запись в состоянии. Ключ ещё не выдан — статус в списке пользователей покажет «ключ не выдан».

  1. Экспорт архивов → отметить space только что созданного пользователя (или a — отметить всех, удобно при пакетном найме) → enter.
  2. Инструмент сгенерирует ключ, пропишет permitopen= под текущие хосты группы, соберёт .7z и покажет один общий пароль на всю партию — он показывается один раз, запишите/скопируйте сразу.
  3. Передайте каждому пользователю его архив (файл, путь показан на экране, лежит в export_dir) любым каналом, а пароль от архива — отдельным каналом (голосом, в личку) и по возможности не всем одним и тем же сообщением в общем чате.
  4. Пользователь распаковывает архив на Windows по инструкции INSTRUCTIONS.txt внутри архива (она уже сгенерирована под его конкретные разрешённые хосты).

Сценарий 2: добавили новый разрешённый хост существующей группе

  1. Группы и хосты → выбрать группу → enter.
  2. n → заполнить новый хост → enter.

Это сразу обновляет permitopen= в authorized_keys всех активных пользователей этой группы — доступ появляется немедленно, без каких-либо действий на стороне пользователя. Клиентский конфиг пользователя (его ~/.ssh/config) при этом не обновляется автоматически — если хотите, чтобы у пользователя появился готовый алиас для нового хоста, а не только "голый" доступ, повторно прогоните его через Экспорт архивов (это заодно ротирует его ключ — считайте это плановой ротацией, не проблемой).

Удаление хоста из группы (d в списке хостов) действует так же немедленно и в обратную сторону.

Сценарий 3: сотрудник уволился

  1. Пользователи → выбрать пользователя → l (заблокировать).

Это одновременно: блокирует пароль аккаунта, устанавливает немедленный срок истечения аккаунта (chage -E 1) и комментирует его ключ в authorized_keys — три независимых механизма, чтобы блокировка не зависела от одного из них. Статус в списке сменится на locked.

Если сотрудник вернулся — u (разблокировать) на том же пользователе: снимает блокировку аккаунта и восстанавливает его ключ в authorized_keys с текущими правами групп.

Полное удаление аккаунта (d) — необратимо (userdel -r, домашняя папка стирается), используйте для окончательного оффбординга, не для временной блокировки.

Сценарий 4: проверить, кто сейчас подключён / посмотреть историю

Аудит / кто в сети показывает:

  • «Сейчас в сети» — список активных SSH-сессий (по процессам sshd: user [priv], а не по who, потому что форвардинг-сессии без интерактивного терминала не создают обычных login-записей);
  • «Последние события» — журнал подключений/отключений, который в фоне собирает ssh-access-tui-audit.service из journalctl, независимо от ротации системного журнала.

r — обновить оба списка. Если журнал подключений пуст, хотя пользователи явно заходили — проверьте, что фоновый сервис запущен: systemctl status ssh-access-tui-audit.service.

Сценарий 5: перенос на новый хост / хост умер

См. подробности в ARCHITECTURE.md. Коротко: состояние (groups, users, публичные ключи, статусы) — git-репозиторий, бэкапится часовым таймером в удалённый git. На новом хосте: поднять ssh-access-tui, влить state.yaml из бэкапа, создать системные Linux-аккаунты для активных пользователей, выпустить им новые ключи через Экспорт архивов (старые приватные ключи специально нигде не хранятся — это не баг, см. архитектурный документ).

Что не делает эта версия (нужно руками)

  • Не удаляет .7z из export_dir после доставки — сделайте это сами, когда получатель подтвердил, что распаковал архив.
  • Не обновляет клиентский ~/.ssh/config пользователя автоматически при появлении нового хоста в его группе — только права доступа на сервере обновляются немедленно (см. сценарий 2).
  • Не поддерживает одновременную работу нескольких администраторов — рассчитан на одного за раз (см. «Конкурентность» в ARCHITECTURE.md).