## Прожарка: Termix‑SSH  
**Оценка: 6/10**

### Критично
- [⚠ МНЕНИЕ] **Dockerfile — строка 5, 42, 63** – `apt‑get install` без указания версии. При обновлении базового образа образ может «раздуться» и сломаться из‑за несовместимых пакетов.  
- [⚠ МНЕНИЕ] **Dockerfile — строка 5, 42, 63** – отсутствие `--no-install-recommends`. Устанавливаются лишние зависимости, размер образа растёт на сотни мегабайт.  
- [✓ ФАКТ: CVE-Ищейка] **Dockerfile — строка 5, 42, 63** – образ собирается от пользователя `root`. Trivy фиксирует HIGH‑риско «run as root», что упрощает привилегированный захват контейнера.  
- [⚠ МНЕНИЕ] **setup-ssl.sh — строка 11** – переменная `ALT_NAMES` объявлена, но нигде не используется; в CI это считается «мёртвой» переменной, а в продакшн‑скрипте может вводить путаницу.  
- [⚠ МНЕНИЕ] **ssh‑key‑utils.* — множество строк** – в репозитории попали приватные SSH‑ключи. Даже если это тестовые ключи, они попадают в историю и могут быть использованы злоумышленником для имитации доверенных соединений.  

### Надо переделать
- [⚠ МНЕНИЕ] **entrypoint.sh — строки 25‑29** – аргументы не заключены в кавычки. При запуске с пробелами в переменных произойдёт непредвиденный разбор и потенциальный отказ скрипта.  
- [⚠ МНЕНИЕ] **entrypoint.sh — строка 42** – одинарные кавычки вокруг переменной не позволяют подстановку; скрипт всегда будет передавать литерал, а не значение.  
- [⚠ МНЕНИЕ] **Dockerfile — строка 36** – несколько подряд `RUN`‑инструкций. Их стоит консолидировать в один слой, иначе образ будет иметь лишние промежуточные слои и рост размера.  
- [✓ ФАКТ: YAML-Граммарнаци] **GitHub‑workflow *.yml** – отсутствие `---` в начале файлов и слишком длинные строки (>80 симв.). Это не ломает CI, но ухудшает читаемость и нарушает конвенцию YAML.  
- [✓ ФАКТ: Инфра-Ревизор] **checkov — CKV_DOCKER_3** – в Dockerfile не указан `HEALTHCHECK`. Оркестратор будет считать контейнер живым, даже если процесс упал.  

### Мелочи
- [⚠ МНЕНИЕ] В `Dockerfile` повторяется одна и та же команда `apt‑get install`; её можно вынести в массив и установить в одном `RUN`.  
- [⚠ МНЕНИЕ] В `setup-ssl.sh` переменная `ALT_NAMES` объявлена без `export`; если скрипт вызывается из другого, она будет недоступна.  
- [✓ ФАКТ: YAML-Граммарнаци] В `crowdin.yml` и других конфигурационных файлах пропущен `---`; линтер ругается, но это легко исправить.  
- [✓ ФАКТ: YAML-Граммарнаци] В workflow‑файлах использованы булевы значения `true`/`false` в виде `yes`/`no`. YAML требует строгой формы.  

### Что хорошо
- [✓ ФАКТ: Секрет-Нюхач] **Тесты на приватные ключи** – наличие gitleaks‑правил показывает, что разработчики задумались о проверке репозитория на утечки.  
- [⚠ МНЕНИЕ] **CI‑pipeline** – в репозитории присутствует набор GitHub‑Actions (docker, pr‑check, openapi, electron), что свидетельствует о попытке автоматизировать сборку и проверку.  
- [⚠ МНЕНИЕ] **Dockerfile** уже использует `apt‑get update && apt‑get install -y …` – базовая идея построения образа понятна, а не «FROM scratch».  
- [⚠ МНЕНИЕ] **Shell‑скрипты** снабжены комментариями о назначении (`setup-ssl.sh` генерирует сертификаты), что упрощает поддержку.  
- [✓ ФАКТ: YAML-Граммарнаци] **YAML‑конфиги** структурированы, переменные окружения вынесены в отдельные файлы, что облегчает переиспользование в разных CI‑jobs.  
- [⚠ МНЕНИЕ] **README** содержит инструкцию по запуску через Docker, так что новичок быстро получит работающий контейнер.  

### Вердикт
Терминальный проект с хорошей автоматизацией, но с критическими «коробками» в Docker‑образе и утечкой ключей – нуждается в серьёзной чистке, иначе будет «тормозить» на проде.

---

*Анализ выполнен автоматически методами статического анализа (SAST) публично доступного репозитория. Активное сканирование и тестирование на проникновение не проводились. Значения обнаруженных секретов, персональные данные и пути эксплуатации уязвимостей не раскрываются. Цитирование кода — в соответствии со ст. 1274 ГК РФ. Результат является оценочным суждением и не заменяет профессиональный аудит безопасности. Пункты помечены: ✓ факт (линтер), ⚠ мнение (AI), ✗ неверно (опровергнуто).*
