SSH агент

Обзор

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

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

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

Настройка

Аутентификация по паролю

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

Если вы не собираетесь использовать ключи, то (помимо привязки библиотеки libssh2/libssh к 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, чтобы он соответствовал параметру конфигурации SSHKeyLocation сервера Zabbix, упомянутому выше.

Следующие шаги можно пропустить, если учетная запись 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):
<Leave empty>
# Enter same passphrase again: 
<Leave empty>
# 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, что соответствует параметру конфигурации SSHKeyLocation сервера Zabbix.

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

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

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

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

sudo -u zabbix ssh-copy-id [email protected]
# The authenticity of host '10.10.10.10 (10.10.10.10)' can't be established.
# RSA key fingerprint is 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46.
# Are you sure you want to continue connecting (yes/no)?
yes
# Warning: Permanently added '10.10.10.10' (RSA) to the list of known hosts.
# [email protected]'s password:
<Enter root password>
# Now try logging into the machine, with "ssh '[email protected]'",
# and check to make sure that only the key(s) you wanted were added.

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

sudo -u zabbix ssh [email protected]

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

Конфигурация элемента данных

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

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

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

Parameter Description Comments
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). Обратите внимание, что использование подсистемы также может потребовать применения определенного синтаксиса скрипта в параметре Выполняемый скрипт.

Примеры:
=> 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 Выполняемые команды shell через удаленный сеанс SSH. Возвращаемое значение выполняемой команды shell ограничено 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>
]]>]]>