
ssh-chat на современном c

Общее программное обеспечение BBS
SSH-Chatter возник как переписанная на C реализация Go-сервера ssh-chat. Он повторяет/расширяет оригинальное поведение, используя современные паттерны C и небольшое, тестируемое ядро. Сервер принимает SSH/TELNET-подключения и помещает каждого аутентифицированного пользователя в общий чат, предоставляющий такой же набор команд, как и эталонная реализация на Go.
Знаете, почему так долго изучать C? Потому что это инстинкт.
/rss list, /rss read <tag>, а также /rss add <url> <tag> и /rss del <tag> (только для операторов), чтобы комната могла вместе просматривать заголовки./delete-msg для целенаправленной очистки истории чата./bbs, открывающая погружающую ретро-систему BBS с тегами, комментариями, поднятием тем и многострочным редактором.
bumped (недавняя активность), hot (популярные по рейтингу и комментариям), top (наивысший чистый рейтинг) или new (дата создания) с помощью list [hot|top|new|bumped|all].search <query>.▲ 12 💬 5) прямо в списках./bbs внутри режима BBS./asciiart — живой редактор с лимитом в 640 строк, десятиминутной задержкой на IP, многострочным выводом и сочетаниями клавиш: отмена по Ctrl+A, отправка по Ctrl+S или с помощью локализованного разделителя >/__ARTWORK_END> по умолчанию./birthday для регистрации дней рождения, /grant <ip> чтобы LAN-операторы могли делегировать привилегии по IP-адресу, и /revoke <ip> чтобы старшие LAN-администраторы могли их отозвать./ban, принимающий чистые IP-адреса помимо имён пользователей./weather <city> для быстрого прогноза погоды в мире.

Кодовая база намеренно компактна, чтобы новые участники могли быстро в ней ориентироваться:
| Путь | Описание |
|---|---|
src/main.c | Разбор командной строки и загрузка процесса (адрес привязки, порт, MOTD, каталог ключей хоста). |
src/host_aggregate.c, include/ssh_chatter/host.h | Реализация хоста чата — жизненный цикл сессий, обработка MOTD и точки подключения для будущей логики рассылки сообщений. |
src/host | Модульные подсистемы хоста, компилируемые в одну единицу трансляции через src/host_aggregate.c. |
include/ssh_chatter | Общие заголовочные файлы для демона, стресс-инструментов и бэкенда перевода. |
include/ssh_chatter/contexts | Определения session_ctx_t и связанных структур, инкапсулирующих состояние каждого подключения. |
data/banner/banner | Пример приветственного баннера, на который можно указать через CHATTER_WELCOME_BANNER. |
scripts/install_chatter_service.sh | Удобный скрипт установки: собирает бинарник, устанавливает его в /usr/local/bin и настраивает systemd-юнит (chatter.service). |
scripts/install_dependencies.sh | Минимальный установщик пакетов для сборки на Debian/Ubuntu. |

mainВетка work регулярно расходится с разработкой в upstream, чтобы крупные функции могли
созревать, не нарушая работу production. Когда приходит время синхронизироваться с
main, стяните последнее дерево и слейте его локально перед открытием pull request:```bash
git fetch origin main
git checkout work
git merge --no-ff origin/main
Разрешите любые конфликты на месте (вспомогательные процедуры в `src/host_aggregate.c` уже повторяют структуру, используемую в `main`, поэтому слияния обычно проходят без проблем) и выполните `make`, чтобы убедиться, что сборка всё ещё выполняется успешно, перед отправкой результата.
## Хуки автоматизации
- `host_snapshot_last_captcha` предоставляет последнюю сгенерированную капчу (вопрос и ответ) вместе с временной меткой, чтобы внешние клиенты могли проходить проверки от имени неавтоматизированной автоматизации.
## Усиление безопасности
- `scripts/safe_permission.sh` ужесточает права владения и режим доступа к файлам данных времени выполнения (состояние BBS, состояние голосования, снимки кулдауна и общее состояние чата). Запускайте его после развертывания, чтобы ограничить каталог данных только пользователем `ssh-chatter` и установить для каждого файла режим `0600`. Вы можете переопределить цели, передав явные пути или экспортировав переменные окружения `STATE_ROOT` или соответствующие `CHATTER_*_FILE` перед выполнением.
- Фоновый сторож BBS периодически пропускает сообщения и комментарии через конвейер модерации ИИ (основной – Gemini с запасным Ollama). Отмеченные сообщения автоматически удаляются, а в комнату транслируется уведомление.
- Сообщения чата, ASCII-арт и сообщения/комментарии BBS проходят через конвейер модерации ИИ. Включите его с помощью `CHATTER_SECURITY_AI=on` (укажите `GEMINI_API_KEY` для Gemini; демон автоматически переключается на локальный Ollama-эндпоинт по адресу `http://127.0.0.1:11434`). Отключите всё с помощью `CHATTER_SECURITY_FILTER=off`. Если все провайдеры выходят из строя, фильтр автоматически отключается, чтобы разговор продолжался, а не молча отбрасывался контент.
- SSH-транспорт привязан к современным обменам ключами, шифрам и MAC-кодам, а каждый мостовой полезный груз обёрнут в тройную луковицу AES-256-GCM, так что реле видят только зашифрованный текст.
- Подозрительные отправки, срабатывающие на многоуровневый фильтр, теперь отслеживаются по IP; при повторных попаданиях автоматически срабатывает кик и бан (если это включено), в то время как детектор быстрых переподключений предоставляет более длинные окна восстановления, чтобы нестабильные сессии могли повторно подключиться без штрафа. Автоматические записи бана **отключены по умолчанию**; установите `CHATTER_AUTO_BAN=on` (или `true`/`1`) для их включения, либо оставьте переменную не установленной, чтобы использовать предупреждения и ограничение трафика без записи автоматических записей бана.
- Операторы могут пометить доверенные точки входа (выходы VPN, обратные прокси, локальный хост) с помощью `CHATTER_PROTECTED_IPS` (разделяются запятыми, по умолчанию `127.0.0.1,::1,192.168.0.1`), чтобы аварийные баны никогда не блокировали демону доступ к собственной панели управления.
## Хранение файлов и передача