redlineoandClaude Sonnet 5 f1c67669fd Fix template list becoming unclickable with many entries via Dock layout
lstTemplates was a direct child of tabTemplates with an explicit pixel
Size, computed once against this dev machine's tab-strip height under
its own DPI/font scale. On the operator's real machine, adding enough
templates pushed rows past the control's actual bottom edge -
maximizing the window didn't help, confirming it wasn't a screen-space
problem but a stale size assumption baked into the designer file (the
same root cause as the earlier add/remove-button visibility bug).

Moved the button strip + list into their own panel (pnlTemplateList),
with the buttons Dock=Top and lstTemplates Dock=Fill - the list's
bounds are now computed by the layout engine against the real
container at runtime, with no absolute size to be wrong about,
regardless of DPI/font scale/window size.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 12:39:49 +03:00
2026-07-23 11:29:25 +03:00
2026-07-22 14:14:53 +03:00
2026-07-23 12:38:13 +03:00
2026-07-23 12:38:13 +03:00
2026-07-22 14:14:53 +03:00
2026-07-23 11:29:25 +03:00
2026-07-22 14:14:53 +03:00
2026-07-22 14:14:53 +03:00
2026-07-23 12:38:13 +03:00
2026-07-23 12:38:13 +03:00

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/                  руководство администратора, архитектура/модель угроз
S
Description
No description provided
Readme
6.9 MiB
0 Stars 1 Watchers 0 Forks
2026-07-24 13:05:30 +03:00
Languages
Go 52.1%
C# 45.5%
PowerShell 1.3%
Shell 1.1%