9 SSH检查

概览

SSH 检查作为 agent-less 监控执行。Zabbix agent 对于 SSH 检查并非必需。

要执行 SSH 检查,Zabbix server 必须最初 configured 具有 SSH2 支持(libssh 或 libssh2)。更多信息请参见: Requirements

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

配置

密码验证

SSH 检查提供两种验证方法 - 用户/密码对和基于密钥文件。

如果您不打算使用密钥,则无需进行其他配置,除了将 libssh 或 libssh2 链接到 Zabbix(如果您从源代码构建)之外。

密钥文件认证

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

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

# SSHKeyLocation=

取消注释并设置完整路径到将存放公钥和私钥的文件夹:

SSHKeyLocation=/home/zabbix/.ssh

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

路径/home/zabbixzabbix用户账户的主目录, 而.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
       # 正在生成公钥/私钥rsa密钥对。
       # 输入要保存密钥的文件路径(/home/zabbix/.ssh/id_rsa):
       /home/zabbix/.ssh/id_rsa
       # 输入密码(留空则无密码):
       <留空>
       # 再次输入密码: 
       <留空>
       # 您的身份已保存在/home/zabbix/.ssh/id_rsa。
       # 您的公钥已保存在/home/zabbix/.ssh/id_rsa.pub。
       # 密钥指纹为:
       # 90:af:e4:c7:e3:f0:2e:5a:8d:ab:48:a2:0c:92:30:b9 zabbix@it0
       # 密钥的随机艺术图像为:
       # +--[ RSA 2048]----+
       # |                 |
       # |       .         |
       # |      o          |
       # | .     o         |
       # |+     . S        |
       # |.+   o =         |
       # |E .   * =        |
       # |=o . ..* .       |
       # |... oo.o+        |
       # +-----------------+

公钥和私钥(id_rsa.pubid_rsa)默认已生成在/home/zabbix/.ssh目录中, 这与Zabbix服务器SSHKeyLocation配置参数对应。

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

Shell 配置表

对于每个将由 SSH 检查监控的主机,此步骤仅应执行一次。

通过使用以下命令,可以在远程主机 10.10.10.10 上安装 公钥 文件,以便可以使用 root 帐户执行 SSH 检查(为了更好的可读性,命令提示符被注释掉):

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。
       # 您确定要继续连接吗(是/否)?
       
       # 警告:已将“10.10.10.10”(RSA)永久添加到已知主机列表中。
       # [email protected] 的密码:
       <输入 root 密码>
       # 现在尝试使用“ssh '[email protected]'”登录机器,
       # 并检查以确保只添加了您想要的密钥。

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

sudo -u zabbix ssh [email protected]

如果登录成功,则 shell 中的配置部分已完成,可以关闭远程 SSH 会话。

监控项配置

实际要执行的命令必须放置在监控项配置的 执行脚本 字段中。 多个命令可以通过在新行放置它们来依次执行。在这种情况下,返回的值也将被格式化为多行。

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

SSH监控项需要特定信息的字段如下:

参数 描述 注释
类型 在此处选择 SSH agent
格式为 ssh.run[独特的简短描述,<ip>,<端口>,<编码>,<ssh选项>] 的唯一(每主机)监控项键 独特的简短描述 是必需的,并且对于每个主机的每个SSH监控项都应是唯一的。

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

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

支持以下选项键:KexAlgorithms, HostkeyAlgorithms, Ciphers, MACs。选项键和值的支持取决于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"]
认证方法 “密码”或“公钥”之一。
用户名 用于在远程主机上进行认证的用户名(最多255个字符)。必需。
公钥文件 如果 认证方法 是“公钥”,则公钥的文件名。必需。 示例:id_rsa.pub - 由命令 ssh-keygen 生成的默认公钥文件名。
私钥文件 如果 认证方法 是“公钥”,则私钥的文件名。必需。 示例:id_rsa - 默认私钥文件名。
密码
密钥短语
用于认证的密码(最多255个字符)或
如果用于私钥的 密钥短语
如果未使用密钥短语,则留空 密钥短语 字段。
另请参阅关于密钥短语使用的 已知问题
执行脚本 使用SSH远程会话执行的shell命令(s)。 执行的shell命令(s)的返回值限制为16MB(包括被截断的尾随空白);数据库限制 也适用。

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

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