The add/remove template buttons sat directly below the fixed-height list with only 6px of margin to the tab's bottom edge - enough on this dev machine but not on the operator's real one (different DPI/font scale), so the buttons rendered off the visible area. Moved them above the list instead (visibility no longer depends on how much space is left at the bottom) and gave the whole "Шаблоны" tab substantially more vertical room throughout. Also added an optional per-template login regex filter (MailTemplateDefinition.LoginPattern): once a file's suffix matches a template, its login must also match that template's pattern (if any) or the row surfaces as a clear Error in the preview instead of silently going through - addresses "непонятно что будет работать". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ssh-access-tui
Консольный (TUI) инструмент для администрирования Linux jump-хоста: заводит
пользователей, у которых есть только проброс портов к явно разрешённому
списку внутренних хостов — без интерактивного шелла. Клиентский конфиг
выдаётся в одном из двух режимов на выбор администратора (переключается на
пользователя, по умолчанию — первый): LocalForward (одно всегда открытое
соединение jump сразу открывает все разрешённые сервисы на локальных
портах) или ProxyJump (отдельный Host-алиас на каждый сервис, ssh <алиас> по требованию, без постоянно открытого туннеля и локальных портов).
Оба режима — только формат клиентского конфига; на сервере в обоих случаях
одинаково работает permitopen=-ограничение в authorized_keys (см.
docs/ARCHITECTURE.md). Хосты и сервисы описываются
один раз в общем каталоге, группы просто выбирают из него. Генерирует и
раздаёт зашифрованные архивы с ключом/конфигом/инструкцией, блокирует
уволенных, пишет журнал подключений, хранит всю конфигурацию в git для
бэкапа/переезда, и требует явное подтверждение (ввод случайной строки) для
любого деструктивного действия.
Почему не веб-панель: инструмент требует root (создание пользователей,
правка authorized_keys и sshd_config). Веб-бэкенд с такими правами —
новый слушающий процесс с TLS/сессиями/CSRF на и так критичном хосте. TUI
работает поверх уже существующего SSH+sudo доступа админа и не добавляет
новой сетевой поверхности атаки.
Требования на jump-хосте
- Linux с systemd и OpenSSH ≥ 7.2 (
restrict,permitopen=вauthorized_keys; актуальные Debian/Ubuntu/RHEL этому условию отвечают). ssh-keygen,7z(пакетp7zip-full),git— устанавливаются через системный пакетный менеджер.- Go ≥ 1.24 — только для сборки бинарника (можно собрать на другой машине).
Установка
sudo apt-get install -y p7zip-full git # или аналог для вашего дистрибутива
sudo ./scripts/install.sh
Скрипт собирает бинарник, ставит systemd-юниты (сборщик журнала подключений
и часовой git-бэкап состояния), создаёт каталоги /var/lib/ssh-access-tui/*
и Match-блок в /etc/ssh/sshd_config.d/50-ssh-access-tui.conf.
После установки настройте git-бэкап на внешний репозиторий (см. docs/ARCHITECTURE.md):
git -C /var/lib/ssh-access-tui/state remote add origin <ssh-или-https-url>
Запуск
sudo ssh-access-tui
Полное руководство по экранам и типовым сценариям — в docs/ADMIN_GUIDE.md. Обоснование архитектурных решений и модель угроз — в docs/ARCHITECTURE.md.
Структура репозитория
cmd/ssh-access-tui/ точка входа (TUI, install, audit-tail)
internal/model/ типы данных (Group, Host, User, State)
internal/store/ YAML-состояние в git-репозитории, файловая блокировка
internal/sysadm/ useradd/usermod, authorized_keys, sshd Match-блок
internal/keymgr/ генерация ключей, клиентский config, .7z архив
internal/audit/ журнал подключений (JSONL) + "кто сейчас в сети"
internal/ui/ bubbletea TUI
scripts/ install.sh, systemd-юниты, скрипт бэкапа
docs/ руководство администратора, архитектура/модель угроз