Files
ssh-access-tui/README.md
T
2026-07-23 12:38:13 +03:00

76 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ssh-access-tui
Консольный (TUI) инструмент для администрирования Linux jump-хоста: заводит
пользователей, у которых есть **только** проброс портов к явно разрешённому
списку внутренних хостов — без интерактивного шелла. Клиентский конфиг
выдаётся в одном из двух режимов на выбор администратора (переключается на
пользователя, по умолчанию — первый): `LocalForward` (одно всегда открытое
соединение `jump` сразу открывает все разрешённые сервисы на локальных
портах) или `ProxyJump` (отдельный `Host`-алиас на каждый сервис, `ssh
<алиас>` по требованию, без постоянно открытого туннеля и локальных портов).
Оба режима — только формат клиентского конфига; на сервере в обоих случаях
одинаково работает `permitopen=`-ограничение в `authorized_keys` (см.
[docs/ARCHITECTURE.md](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 — только для сборки бинарника (можно собрать на другой машине).
## Установка
```sh
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](docs/ARCHITECTURE.md#бэкап-и-аварийное-восстановление)):
```sh
git -C /var/lib/ssh-access-tui/state remote add origin <ssh-или-https-url>
```
## Запуск
```sh
sudo ssh-access-tui
```
Полное руководство по экранам и типовым сценариям — в
[docs/ADMIN_GUIDE.md](docs/ADMIN_GUIDE.md).
Обоснование архитектурных решений и модель угроз — в
[docs/ARCHITECTURE.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/ руководство администратора, архитектура/модель угроз
```