Для нужд моей задумки по настройке связки системы мониторинга на базе Zabbix 5.0 LTS и jabber сервиса в лице OpenFire 4.6.0 мне нужен какой-либо клиент который я могу использовать на srv-zabbix чтобы он авторизовывался на OpenFire (srv-openfire) и отсылал информацию адресатам группы (к примеру ранее я уже создал группу GROUP_ALERT). В данную группу включены: Login: ekzorchik, alert, alektest

Шаг №1: Подключаюсь по ssh к системе на которой у меня развернут Zabbix 5.0 LTS

Шаг №2: Смотрю, какой пакет можно использовать в репозитариях для работы через протокол XMPP, к примеру воспользуюсь пакетом sendxmpp

ekzorchik@srv-zabbix:~$ apt-cache show sendxmpp | grep Version

Version: 1.24-2

ekzorchik@srv-zabbix:~$ sudo apt-get install -y sendxmpp

ekzorchik@srv-zabbix:~$ whereis sendxmpp

sendxmpp: /usr/bin/sendxmpp /usr/share/man/man1/sendxmpp.1p.gz

Консольная утилита sendxmpp позволяет отправлять сообщения по протоколу xmpp (попросту Jabber) как отдельным получателям, так и chatrooms.

На заметку: За справкой, если отправлять сообщения буду через консоль, следует обратится к справочной системе: man sendxmpp

Шаг №3: Чтобы отправить сообщение адресу без использования конфигурационного файла:

ekzorchik@srv-zabbix:~$ echo lin.ekzorchik.ru | sendxmpp -j srv-openfire.polygon.lan -u alert -p Aa1234567 alektest@srv-openfire.polygon.lan

если требуется отладка, то добавляем ключ «-d»

У меня есть настроенный jabber клиент на смартфоне Honor 9X и учетной записи alektest приходит сообщение от alert с телом в виде «lin.ekzorchik.ru»

Шаг №4: Но можно не в одну строку указывать кому отправляем сообщение, а задействовать создаваемый конфигурационный файл утилиты sendxmpp:

ekzorchik@srv-zabbix:~$ nano ~/.sendxmpprc

alert@srv-openfire.polygon.lan

Теперь нужно выставить на него такие права, чтобы этот файл мог читать только тот юзер, от имени которого будет запускаться SendXMPP:

ekzorchik@srv-zabbix:~$ chmod 600 ~/.sendxmpprc

если не выставить права, то при отправке:

ekzorchik@srv-zabbix:~$ echo lin.ekzorchik.ru | sendxmpp -t ekzorchik@srv-openfire.polygon.lan

/home/ekzorchik/.sendxmpprc must not be accessible by others

ekzorchik@srv-zabbix:~$

Теперь можно отправить сообщение и его увидят те кто состоят в группе от имени кого отправляю и кому отправляю:

ekzorchik@srv-zabbix:~$ echo lin.ekzorchik.ru | sendxmpp -t ekzorchik@srv-openfire.polygon.lan

syntax error in line 1 of /home/ekzorchik/.sendxmpprc

ekzorchik@srv-zabbix:~$

Так что не так? Из man sendxmpp вычитал, что синтаксис ~/.sendxmpprc следующий:

  • username: alert
  • jserver: srv-openfire.polygon.lan
  • port: 5222
  • password: Aa1234567

На заметку: 5222 — Порт, используемый протоколом SSL для шифрования трафика по сети Клиент — сервер Стандартный порт для подключения клиентов к серверу. На этом порту установлены текстовые соединения, которые, в зависимости от настраиваемых параметров безопасности, могут (или должны) быть обновлены до зашифрованных соединений.

А вот в более ранних версиях конфигурационный файл — это и была одна строчка по синтаксису:

With version 1.23 and older only one-line format is supported:

user@server password componentname

инициирую отправку текста lin.ekzorchik.ru

ekzorchik@srv-zabbix:~$ echo lin.ekzorchik.ru | sendxmpp -t ekzorchik@srv-openfire.polygon.lan

Invalid or unreadable path specified for ssl_ca_path. at /usr/share/perl5/XML/Stream.pm line 641.

ekzorchik@srv-zabbix:~$ sudo apt-get install ca-certificates

ekzorchik@srv-zabbix:~$ sudo update-ca-certificates

Использую ключ «-n» чтобы деактивировать проверку ssl сертификата и инициирую отправку сообщения учетной записи ekzorchik:

ekzorchik@srv-zabbix:~$ echo lin.ekzorchik.ru | sendxmpp -n -t ekzorchik@srv-openfire.polygon.lan

Сообщение приходит:

От alert учетной записи ekzorchik пришло сообщение

Отправленный текст сообщения

Шаг №5: Так, а если нужно отправить по формату:

  • Тема
  • Сообщение

смотрю опять справку man sendxmpp:

-s, --subject - тема отправляемого сообщения

-m, --message - текст отправляемого сообщения

-u, --username - имя пользователя

-p, --password - пароль пользователя

-j, --jserver - имя Вашего Jabber-сервера

-o,--component componentname

-t,--tls

Connect securely, using TLS

-e,--ssl

Connect securely, using SSL

-n,--no-tls-verify

Deactivate the verification of SSL certificates. Better way is to

use parameter --tls-ca-path with the needed path to CA

certificates.

-a,--tls-ca-path

Path to your custom CA certificates, so you can verificate SSL

certificates during connecting.

то команда отправки как в одну строку так и с использованием ~/.sendxmpprc выглядит так:

ekzorchik@srv-zabbix:~$ sendxmpp -n -m "message" -s "subject" ekzorchik@srv-openfire.polygon.lan

cannot open message file 'message': No such file or directory

Так чтобы отправить текст сообщения его нужно сперва сохранить, как файл, а после приложить к отправке:

ekzorchik@srv-zabbix:~$ cat /etc/passwd | grep ekzorchik > passwd

ekzorchik@srv-zabbix:~$ sendxmpp -n -m "passwd" -s "/etc/password ekzorchik" ekzorchik@srv-openfire.polygon.lan

итого от alert@srv-openfire.polygon.lan пришло сообщение:

Отправленное вложение через Jabber посредством консоли

Так чтобы отправить не сохраненный файл, а приложить сам файл:

ekzorchik@srv-zabbix:~$ cat /etc/passwd | sendxmpp -n ekzorchik@srv-openfire.polygon.lan

итого от alert@srv-openfire.polygon.lan пришло сообщение:

Отправленный вывод через jabber посредством консоли

Так, а теперь строка отправки сообщения в одну строку без использования ~/.sendsmpprc:

ekzorchik@srv-zabbix:~$ sendxmpp -j srv-openfire.polygon.lan -u alert -p Aa1234567 -s "privet" -m "passwd" alektest@srv-openfire.polygon.lan

и сообщение на смартфон где у меня настроена учетная запись alektest успешно пришло.

Шаг №6: В процессе работы отправки сообщения было зафиксировано, что отправка подвисла:

ekzorchik@srv-zabbix:~$ sendxmpp -j srv-openfire.polygon.lan -u alert -p Aa1234567 -s "Wake UP!" alektest@srv-openfire.polygon.lan

^C

ekzorchik@srv-zabbix:~$

Дело в том что опция -s должна быть в паре с опцией -m, а если отдельно то не работает.

Либо message указывать перед утилитой sendxmpp

ekzorchik@srv-zabbix:~$ cat /etc/group | sendxmpp -j srv-openfire.polygon.lan -u alert -p Aa1234567 -s "group" alektest@srv-openfire.polygon.lan

тогда все успешно работает.

Думаю, пока данных шагов вполне достаточно, отдельно по отправке уведомлений через Zabbix 5.0 LTS буду смотреть отдельно когда прорабатывать и документировать связку. А пока заметка завершена, с уважением автор блога Олло Александр aka ekzorchik.