An operator hit "Значение не может быть неопределенным. Имя параметра: source" (ArgumentNullException, ParamName=source) opening the bulk sender window on a real Outlook install. A full read-through of every LINQ call reachable from that path found nothing that could receive a null source, and this dev machine has no Outlook to reproduce against - so the next occurrence needs a real stack trace to diagnose instead of guessing from ex.Message alone. 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/ руководство администратора, архитектура/модель угроз