Comments 41
Такую же функциональность наверное можно получить с помощью мультиплексора терминала и wall(1) ?
man write
write — send a message to another user…
Вот уже есть на go: github.com/shazow/ssh-chat пользуйтесь.
Некоторые языки лучше годятся для определенных задач. У Go горутины и «автоматический» M:N, что делает его подходящим для написания сетевых программ. В тех же условиях, например, Python будет сильно проигрывать, потому что из-за проблемы раскраски функций далеко не все протоколы реализованы в asyncio-варианте. А на тредах/форках хорошо масштабирующееся приложение не напишешь.
Код открытый, если вам нужна безопасность сделайте форк и увеличьте безопасность
В ssh есть своя надёжная система авторизации по ключам. Зачем городить велосипеды?
Если вы что-то основываете на ssh то вы автоматически обосновываете чат как безопасный.
В какой модели угроз?
СУБД — ну вообще не про ту безопасность, которую обычно называют этим словом без пояснений. Пока у вас таблица умеренных размеров и постоянная на всё время работы приложения — всё правильно делаете, записать в json и не усложнять. Как только в приложении появляется кнопка добавления пользователя — надо не изобретать велосипед, а подключать обычную СУБД.
Добавьте возможность в том же самом файле хранить ключи вместо паролей — это будет всё так же просто, но безопасность значительно увеличится.
Ой да ладно, пароль в текстовом файле, я как представлю сколько там RCE в любую сторону...
А RCE-то откуда? Код слишком простой, так накосячить тут попросту негде.
Криптография
OpenSSL может быть сколько угодно кривым, но лучше всё равно не придумано.
левые библиотеки nodejs с кривыми биндингами
Найдите хоть одну библиотеку с биндингами в предложенном решении.
сам nodejs
И много RCE вы в ноде знаете?
управляющие последовательности в терминале
А они-то каким боком могут RCE устроить?
люди которые ходят с ssh-agent по-дефолту
И что дальше?
OpenSSL
И что дальше? Зачем вообще тащить криптографию в чат сервер написанный на коленке?
Найдите хоть одну библиотеку с биндингами в предложенном решении.
Лучше бы она была, жирная реализация ssh на pure js — ещё больший скоуп для уязвимостей :).
И много RCE вы в ноде знаете?
Правильный вопрос будет — о скольких RCE в ноде я не знаю.
А они-то каким боком могут RCE устроить?
Ну вот тем, что могут :). Их можно использовать для формирования произвольного текста на ввод в терминале. Не везде это отключено/исправлено.
И что дальше?
RCE на серверах куда у этих людей есть доступ.
Старая добрая ирка (irc) на новый лад.
разработать-стандартизировать-описать протокол обмена данными…
перевести на TypeScript…
и (имхо) может получиться очень интересно и с «низким порогом» входа в совместную разработку.
При коннекте происходит подключение к буферизированному пайпу, а весь ввод построчно прогоняется через парсилку и оформлялку, которая кроме прочего дописывает юзернейм и дату-время в каждый пост.
Можно даже чуточку отступить от идеала и сделать в тот же контейнер еще и крон-скрипт с вытесняющим автоудалением сильно старых пользователей. Грубо говоря, если пользователей, скажем, больше 1000, то удаляем всех самых наиболее давно не заходивших, пока не останется 1000.
Ssh-chat