9 Проверки через SSH

Обзор

SSH-проверки выполняются как мониторинг без использования агента. Для SSH-проверок Zabbix агент не требуется.

Для выполнения SSH-проверок Zabbix сервер должен быть предварительно настроен с поддержкой SSH2 (libssh или libssh2). См. также: Требования.

Начиная с RHEL 8, поддерживается только libssh. Для других дистрибутивов рекомендуется использовать libssh вместо libssh2.

Настройка

Аутентификация с парольной фразой

Проверки SSH предоставляют два метода аутентификации — пару имя пользователя/пароль и аутентификацию на основе файла ключа.

Если вы не собираетесь использовать ключи, никакая дополнительная настройка не требуется, кроме подключения libssh или libssh2 к Zabbix, если вы собираете его из исходного кода.

Аутентификация с помощью файлов ключей

Чтобы использовать аутентификацию на основе ключей для SSH-элементов данных, необходимо внести определённые изменения в конфигурацию сервера.

Откройте файл конфигурации сервера Zabbix (zabbix_server.conf) от имени root и найдите следующую строку:

# SSHKeyLocation=

Раскомментируйте её и укажите полный путь к каталогу, где будут находиться открытый и закрытый ключи:

SSHKeyLocation=/home/zabbix/.ssh

Сохраните файл и после этого перезапустите сервер Zabbix.

Путь /home/zabbix здесь является домашним каталогом учётной записи zabbix, а .ssh — это каталог, в котором по умолчанию будут сгенерированы открытый и закрытый ключи командой ssh-keygen внутри домашнего каталога.

Обычно установочные пакеты сервера Zabbix из различных дистрибутивов ОС создают учётную запись zabbix с домашним каталогом в другом месте, например, /var/lib/zabbix (как для системных учётных записей).

Перед генерацией ключей вы можете перенести домашний каталог в /home/zabbix, чтобы он соответствовал параметру конфигурации сервера Zabbix SSHKeyLocation, упомянутому выше.

Следующие шаги можно пропустить, если учётная запись zabbix была добавлена вручную в соответствии с разделом установки. В таком случае домашний каталог для учётной записи zabbix, скорее всего, уже имеет путь /home/zabbix.

Чтобы изменить домашний каталог учётной записи zabbix, необходимо остановить все рабочие процессы, которые его используют:

systemctl stop zabbix-agent
systemctl stop zabbix-server

Чтобы изменить расположение домашнего каталога с попыткой его переноса (если он существует), следует выполнить следующую команду:

usermod -m -d /home/zabbix zabbix

Также возможно, что домашний каталог не существовал в старом расположении, поэтому его следует создать в новом месте. Безопасный способ сделать это:

test -d /home/zabbix || mkdir /home/zabbix

Чтобы убедиться, что всё защищено, можно дополнительно выполнить команды для установки прав доступа к домашнему каталогу:

chown zabbix:zabbix /home/zabbix
chmod 700 /home/zabbix

Ранее остановленные процессы теперь можно снова запустить:

systemctl start zabbix-agent
systemctl start zabbix-server

Теперь можно выполнить шаги по генерации открытого и закрытого ключей с помощью следующих команд (для лучшей читаемости приглашения командной строки закомментированы):

sudo -u zabbix ssh-keygen -t rsa
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/zabbix/.ssh/id_rsa):
/home/zabbix/.ssh/id_rsa
# Enter passphrase (empty for no passphrase):
<Оставьте пустым>
# Enter same passphrase again: 
<Оставьте пустым>
# Your identification has been saved in /home/zabbix/.ssh/id_rsa.
# Your public key has been saved in /home/zabbix/.ssh/id_rsa.pub.
# The key fingerprint is:
# 90:af:e4:c7:e3:f0:2e:5a:8d:ab:48:a2:0c:92:30:b9 zabbix@it0
# The key's randomart image is:
# +--[ RSA 2048]----+
# |                 |
# |       .         |
# |      o          |
# | .     o         |
# |+     . S        |
# |.+   o =         |
# |E .   * =        |
# |=o . ..* .       |
# |... oo.o+        |
# +-----------------+

Открытый и закрытый ключи (id_rsa.pub и id_rsa) по умолчанию были сгенерированы в каталоге /home/zabbix/.ssh, что соответствует параметру конфигурации сервера Zabbix SSHKeyLocation.

Типы ключей, отличные от "rsa", могут поддерживаться утилитой ssh-keygen и SSH-серверами, но могут не поддерживаться библиотекой libssh2, используемой Zabbix.

Форма настройки shell

Этот шаг следует выполнить только один раз для каждого узла сети, который будет контролироваться с помощью SSH-проверок.

С помощью следующих команд файл публичного ключа можно установить на удалённый узел сети 10.10.10.10, чтобы SSH-проверки могли выполняться с учётной записью root (для лучшей читаемости приглашения командной строки закомментированы):

sudo -u zabbix ssh-copy-id [email protected]
# Подлинность узла сети '10.10.10.10 (10.10.10.10)' не может быть установлена.
# Отпечаток ключа RSA: 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# Вы уверены, что хотите продолжить подключение (yes/no)?
yes
# Предупреждение: '10.10.10.10' (RSA) навсегда добавлен в список известных узлов сети.
# Пароль [email protected]:
<Введите пароль root>
# Теперь попробуйте войти на машину с помощью "ssh '[email protected]'",
# и убедитесь, что были добавлены только те ключи, которые вы хотели.

Теперь можно проверить вход по SSH, используя приватный ключ по умолчанию (/home/zabbix/.ssh/id_rsa) для учётной записи пользователя zabbix:

sudo -u zabbix ssh [email protected]

Если вход выполнен успешно, значит часть настройки в shell завершена, и удалённый SSH-сеанс можно закрыть.

Настройка элемента данных

Фактические команды для выполнения необходимо указать в поле Выполняемый скрипт в настройках элемента данных. Несколько команд можно выполнять последовательно, размещая их каждую с новой строки. В этом случае возвращаемые значения также будут отформатированы как многострочные.

Все обязательные поля ввода отмечены красной звёздочкой.

Поля, требующие специальной информации для SSH-элементов данных:

Параметр Описание Комментарии
Type Выберите здесь SSH agent.
Key Уникальный (в пределах узла сети) ключ элемента данных в формате ssh.run[unique short description,<ip>,<port>,<encoding>,<ssh options>,<subsystem>] unique short description является обязательным и должен быть уникальным для каждого SSH-элемента данных на узле сети.

Порт по умолчанию — 22, а не порт, указанный в интерфейсе, которому назначен этот элемент данных.

ssh options позволяют передавать дополнительные параметры SSH в формате key1=value1;key2=value2,value3. Несколько значений для одного ключа можно передавать через запятую (в этом случае параметр должен быть заключён в кавычки); несколько ключей параметров можно передавать через точку с запятой.

Поддерживаются следующие ключи параметров: KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs, PubkeyAcceptedKeyTypes. Поддержка ключей и значений параметров зависит от SSH-библиотеки (например, PubkeyAcceptedKeyTypes поддерживается только с libssh); если параметр не поддерживается, будет возвращена ошибка, и элемент данных станет неподдерживаемым.

Обратите внимание, что знак "+" для добавления настроек шифров и "!" для отключения определённых настроек шифров (как в GnuTLS и OpenSSL) не поддерживаются.

Примеры:
=> ssh.run[KexAlgorithms,127.0.0.1,,,Ciphers=aes128-ctr]
=> ssh.run[KexAlgorithms,,,,"KexAlgorithms=diffie-hellman-group1-sha1;HostkeyAlgorithms=ssh-rsa,ssh-dss,ecdh-sha2-nistp256"]
=> ssh.run[PubkeyAcceptedKeyTypes,127.0.0.1,,,PubkeyAcceptedKeyTypes=ssh-rsa]

subsystem позволяет передавать подсистему SSH, ограничивая SSH-соединение определёнными операциями, разрешёнными этой подсистемой (например, передачей файлов через SFTP или управлением сетевыми устройствами через NETCONF). Обратите внимание, что использование подсистемы также может требовать применения специального синтаксиса скрипта в параметре Executed script.

Примеры:
=> ssh.run[SFTPBackup,192.0.2.18,,,,sftp]
=> ssh.run[Cisco1234,192.0.2.18,,,,netconf]
Authentication method Один из вариантов: "Password" или "Public key".
User name Имя пользователя (до 255 символов) для аутентификации на удалённом узле сети. Обязательно.
Public key file Имя файла открытого ключа, если Authentication method — "Public key". Обязательно. Пример: id_rsa.pub — имя файла открытого ключа по умолчанию, создаваемого командой ssh-keygen.
Private key file Имя файла закрытого ключа, если Authentication method — "Public key". Обязательно. Пример: id_rsa — имя файла закрытого ключа по умолчанию.
Password or
Key passphrase
Пароль (до 255 символов) для аутентификации или
Парольная фраза, если она использовалась для закрытого ключа.
Оставьте поле Key passphrase пустым, если парольная фраза не использовалась.
См. также известные проблемы, связанные с использованием парольной фразы.
Executed script Выполняемые команды оболочки с использованием удалённой SSH-сессии. Возвращаемое значение выполняемых команд оболочки ограничено 16 МБ (включая конечные пробельные символы, которые усекаются); также применяются ограничения базы данных.

Обратите внимание, что библиотека libssh2 может усекать исполняемые скрипты до \~32 КБ.

Примеры:
date +%s
systemctl status mysql-server
ps auxww \| grep httpd \| wc -l

Пример (для подсистемы NETCONF):
<rpc>
<get-software-information/>
</rpc>
]]>]]>
<rpc>
<close-session/>
</rpc>
]]>]]>