11 SSH agent

概述

SSH 检查作为无 agent 监控执行。SSH 检查不需要 Zabbix agent。

要执行 SSH 检查,必须先为 Zabbix 服务器启用 SSH2 支持(libssh 或 libssh2)并进行配置。另请参见:要求

从 RHEL 8 开始,仅支持 libssh。对于其他发行版,建议使用 libssh 而不是 libssh2。

配置

口令认证

SSH检查提供两种认证方法:用户名/密码对和 基于键值-file。

如果您不打算使用密钥,则无需进行额外配置。 必要时,在链接 libssh 或 libssh2 到 Zabbix 时,如果你正在构建 来自源。

密钥文件认证

要为 SSH 监控项使用基于密钥的认证,需要对服务器配置进行一些更改。

root 身份打开 Zabbix 服务器配置文件 (zabbix_server.conf),并查找以下行:

# SSHKeyLocation=

取消注释,并将其设置为公钥和私钥所在目录的完整路径:

SSHKeyLocation=/home/zabbix/.ssh

保存文件,然后重启 Zabbix 服务器。

这里的路径 /home/zabbixzabbix 用户账户的主目录, 而 .ssh 是一个目录,默认情况下,公钥和私钥会通过 ssh-keygen 命令在主目录中生成。

通常,不同 OS 发行版提供的 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.pubid_rsa) 默认会生成在 /home/zabbix/.ssh 目录中, 这与 Zabbix 服务器的 SSHKeyLocation 配置 参数相对应。

除 "rsa" 之外的其他密钥类型可能被 ssh-keygen 工具和 SSH 服务器支持,但 Zabbix 使用的 libssh2 可能不支持。

Shell 配置表单

此步骤只需为每个将通过SSH检查进行监控的主机执行一次。

通过使用以下命令,可以将公钥 file 安装到远程主机 主机 10.10.10.10 上,以便可以通过 root 账户执行SSH检查(为了提高可读性,命令提示符已被注释):

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.

现在可以使用 zabbix 用户账户的默认私钥(/home/zabbix/.ssh/id_rsa)来检查SSH login:

sudo -u zabbix ssh [email protected]

如果 login 成功,则表示Shell中的配置部分已完成,可以关闭远程SSH会话。

监控项配置

实际要执行的命令必须放在监控项配置中的 Executed script 字段里。 可以通过将多个命令放在新的一行中,按顺序逐个执行。在这种情况下,返回值也会以多行格式显示。

所有必填输入字段都用红色星号标记。

SSH 监控项需要填写的字段如下:

Parameter Description Comments
Type 在此选择 SSH agent
Key 唯一的(按主机区分)监控项键,格式为 ssh.run[unique short description,<ip>,<port>,<encoding>,<ssh options>] unique short description 为必填项,并且对于每个主机上的每个 SSH 监控项都应唯一。

默认端口为 22,而不是分配给此监控项的接口中指定的端口。

ssh options 允许以 key1=value1;key2=value2,value3 的格式传递额外的 SSH 选项。一个键的多个值可以用逗号分隔传递(在这种情况下,参数必须 加引号);多个选项键可以用分号分隔传递。

支持以下选项键:KexAlgorithmsHostkeyAlgorithmsCiphersMACs。选项键和值是否受支持取决于 SSH 库;如果某个选项不受支持,将返回错误,并且该监控项将变为不受支持。

请注意,不支持用于追加密码套件设置的 "+" 符号,以及用于禁用特定密码套件设置的 "!" 符号(如 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"]
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 远程会话执行的 shell 命令。 已执行 shell 命令的返回值上限为 16MB(包括会被截断的末尾空白字符);同时也受数据库限制约束。

请注意,libssh2 库可能会将可执行脚本截断为约 \~32kB。

示例:
date +%s
systemctl status mysql-server
ps auxww | grep httpd | wc -l