- PVSM.RU - https://www.pvsm.ru -

Здравствуйте, коллеги!
Новый год подкрадывается всё ближе, а это значит, что нам снова пора собраться вместе для того чтобы хорошо провести время!
Для тех кто еще не знаком с новогодним хабрачатом, расскажу немного про него. Это несколько чатов на разных платформах, объединенных мостом. Боты в каждой из платформ пересылают сообщения из остальных и получается, что все как-бы находятся в одном чате, при этом не покидаю любимой платформы. В этом чате мы традиционно встречаем Новый год уже четвертый раз (в прошлом году только в одном SSH-чате было больше сотни человек).
В центре внимания, конечно, SSH-чат, который работает только несколько дней до нового года и несколько после. В этом году разные люди так же подняли чаты в XMPP (Jabber), Телеграмме и IRC. Так же традиционно есть чат-бот tars, который может вывести ёлку и поздравить с новым годом. В прошлые года таких ботов делали несколько человек (кто-то даже на баше).

SSH-чат обычно открывает @podivilov, для этого используется кастомный SSH сервер, написанный на go [1]. Устанавливается и настраивается он довольно просто. Для начала можно освободить стандартный порт SSH, чтобы при заходе в наш чат не вводить порт. В ubuntu server, например, это делается так. В файле /etc/ssh/sshd_config находим строку Port 22 и меняем число на нужный порт. После этого перезапускаем ssh демон sudo systemctl restart sshd и стандартный порт свободен (убедитесь, что фаерфол пропустит вас по новому порту).
Скачивается бинарник под нужную платформу из релизов на github [2]. Можно положить его, например, в /usr/bin. Далее пишем простой скрипт, который будет перезапускать сервер, в случае падения.
#!/bin/bash
while :
do
/usr/bin/ssh-chat --admin=/root/.config/ssh-chat/admins --bind=0.0.0.0:22 --log /root/ssh-chat.log --motd=/root/.config/ssh-chat/motd
sleep 1
done
Давайте разберем параметры запуска
admin путь до файла со списком публичных ключей администраторов (у них стандартный набор возможностей: кик, бан и прочее)
bind айпи и порт, на котором сервер будет транслировать
log путь до файла с логами чата
motd путь до файла с сообщением дня (message of the day), которое будет показываться при каждом заходе в чат
Теперь мы можем запустить этот скрипт любым удобным способом (в сессии tmux/screen, через systemctl и т.д.) и чат готов. Вводим ssh nickname@habr2021.podivilov.ru и попадаем в наш чат. Для списка комманд нужно ввести /help, а для выхода /exit или Ctrl+D.
Мост уже который год хостит @mrDoctorWho, для этого используется matterbridge [3], который кстати тоже написан на go. Его установка и настройка, как ни странно происходит точно так же. Скачиваем бинарник из релизов на github [4] и кладем его, куда нам надо. Далее пишем конфигурационный файл и скрипт старта. Как-то так выглядит конфиг от @mrDoctorWho:
[xmpp.myxmpp]
Server="helldev.net:5222"
#Jid your userid
Jid=""
Password=""
Muc="conference.helldev.net"
Nick="bridge"
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
[sshchat.mychat]
Server="habr2021.podivilov.ru:22"
RemoteNickFormat="[{PROTOCOL}] <{NICK}> "
[telegram.mytelegram]
Token=""
RemoteNickFormat="[{PROTOCOL}] `<{NICK}>` "
MessageFormat="Markdown"
[general]
MediaDownloadPath="/var/www/"
MediaServerDownload="https://helldev.net/"
[[gateway]]
name="gateway1"
enable=true
[[gateway.inout]]
account="telegram.mytelegram"
channel="-1001200239638"
[[gateway.inout]]
account="sshchat.mychat"
channel="sshchat"
[[gateway.inout]]
account="xmpp.myxmpp"
channel="ny"
К сожалению, у matterbridge слишком много возможностей, чтобы описать их в этой статье, поэтому советую обратиться к официальной вики [5], в которой все достоточно понятно и подробно рассписано.
А вот скрипт запуска, который почти ничем не отличается от скрипта для SSH-чата:
#!/bin/bash
while :
do
/usr/bin/matterbridge -conf /root/.config/matterbridge/matterbridge.toml
sleep 1
done
После старта этого скрипта мы имеем полностью работающий мост между всеми нашими чатами.
Чат-бот, который гуляет по чатам уже который год подряд, называется tars. Бот поздравляет с Новым годом, выводит новогоднюю ёлку ASCII-артом и имеет несколько других команд, в зависимости от того, кто его делал. Первая версия была запущена три года назад, к сожалению не помню кем. Бот был написан на bash-скрипте с использованием screen.
Свою версию я писал на JavaScript с использованием только стандартных библиотек. С его исходным кодом можно ознакомиться здесь [6]. Если вкратце, он вызвает процесс командной строки с помощью модуля child_process (в зависимости от операционной системы, используются либо bash.exe, либо bash). Далее он открывает ssh сессию может писать либо читать прямо из нее. Кроме этого, код довольно заурядный, с его последней версией вы можете ознакомиться на гитхабе.
Выбирайте любой понравившийся и присоединяйтесь. С наступающим Новым Годом!
SSH чат: хост: habr2021.podivilov.ru [7], порт 22. Для подключения к SSH-чату можно использовать любой SSH-клиент. Например, OpenSSH [8].
XMPP чат: ny@conference.helldev.net [9]. Список клиентов доступен здесь [10].
Telegram чат: @habrachat2021 [11].
IRC чат: #habr2021 на FreeNode.
Автор: Ivan Alexandrov
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/messendzhery/360235
Ссылки в тексте:
[1] кастомный SSH сервер, написанный на go: https://github.com/shazow/ssh-chat
[2] релизов на github: https://github.com/shazow/ssh-chat/releases/
[3] matterbridge: https://github.com/42wim/matterbridge
[4] релизов на github: https://github.com/42wim/matterbridge/releases
[5] официальной вики: https://github.com/42wim/matterbridge/wiki/How-to-create-your-config
[6] здесь: https://github.com/Rundik/tars
[7] habr2021.podivilov.ru: https://habr.com/ru/news/t/535714/habr2021.podivilov.ru
[8] OpenSSH: https://www.openssh.com/
[9] ny@conference.helldev.net: https://www.pvsm.ruxmpp:ny@conference.helldev.net?join
[10] здесь: http://jawiki.ru/Client
[11] @habrachat2021: https://t.me/habrachat2021
[12] Источник: https://habr.com/ru/post/535756/?utm_source=habrahabr&utm_medium=rss&utm_campaign=535756
Нажмите здесь для печати.