9 SSH检查

概述

SSH 检查以无代理监控的形式执行。SSH 检查不需要 Zabbix agent。

要执行 SSH 检查,Zabbix 服务器必须首先配置 SSH2支持 (libssh 或 libssh2)。另请参阅:要求

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

配置

密码验证

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

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

密钥文件身份验证

要对 SSH 监控项使用基于密钥的身份验证,需要对服务器配置进行某些更改。

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

  1. # SSHKeyLocation=

取消注释并设置公钥和私钥所在文件夹的完整路径:

  1. SSHKeyLocation=/home/zabbix/.ssh

保存文件并重新启动 Zabbix 服务器。

此处的路径 /home/zabbixzabbix 用户帐户的主目录,而 .ssh 是默认的目录,其中的公钥和私钥将由主目录中的 ssh-keygen 命令生成。

通常,不同操作系统发行版的 Zabbix 服务器安装包会在其他地方创建 zabbix 用户帐户,其主目录为 /var/lib/zabbix(对于系统帐户而言)。

在生成密钥之前,您可以将主目录重新分配到 /home/zabbix,以便它与上面提到的 SSHKeyLocation Zabbix 服务器配置参数相对应。

如果已根据 安装部分 手动添加了 zabbix 帐户,则可以跳过以下步骤。在这种情况下,zabbix 帐户的主目录很可能已经是/home/zabbix

要更改 zabbix 用户帐户的主目录,必须停止所有正在使用它的工作进程:

  1. service zabbix-agent stop
  2. service zabbix-server stop

要更改主目录位置并尝试移动它(如果存在),应执行以下命令:

  1. usermod -m -d /home/zabbix zabbix

也可能主目录在旧位置不存在,因此应在新位置创建它。一个安全的尝试是:

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

为了确保一切安全,可以执行其他命令来设置主目录的权限:

  1. chown zabbix:zabbix /home/zabbix
  2. chmod 700 /home/zabbix

现在可以重新启动先前停止的进程:

  1. service zabbix-agent start
  2. service zabbix-server start

现在,可以使用以下命令执行生成公钥和私钥的步骤(为了更好的可读性,命令提示符被注释掉):

  1. sudo -u zabbix ssh-keygen -t rsa
  2. # 生成公钥/私钥 rsa 密钥对。
  3. # 输入要保存密钥的文件 (/home/zabbix/.ssh/id_rsa):
  4. /home/zabbix/.ssh/id_rsa
  5. # 输入密码(空表示无密码):
  6. <留空>
  7. # 再次输入相同的密码:
  8. <留空>
  9. # 您的身份已保存在 /home/zabbix/.ssh/id_rsa 中。
  10. # 您的公钥已保存在 /home/zabbix/.ssh/id_rsa.pub 中。
  11. # 密钥指纹为:
  12. # 90:af:e4:c7:e3:f0:2e:5a:8d:ab:48:a2:0c:92:30:b9 zabbix@it0
  13. # 密钥的随机图像为:
  14. # +--[ RSA 2048]----+
  15. # | |
  16. # | . |
  17. # | o |
  18. # | . o |
  19. # |+ . S |
  20. # |.+ o = |
  21. # |E . * = |
  22. # |=o . ..* . |
  23. # |... oo.o+ |
  24. # +-----------------+

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

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

Shell 配置表

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

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

  1. sudo -u zabbix ssh-copy-id [email protected]
  2. # 无法确定主机 '10.10.10.10 (10.10.10.10)' 的真实性。
  3. # RSA 密钥指纹为 38:ba:f2:a4:b5:d9:8f:52:00:09:f7:1f:75:cc:0b:46。
  4. # 您确定要继续连接吗(是/否)?
  5. # 警告:已将“10.10.10.10”(RSA)永久添加到已知主机列表中。
  6. # [email protected] 的密码:
  7. <输入 root 密码>
  8. # 现在尝试使用“ssh '[email protected]'”登录机器,
  9. # 并检查以确保只添加了您想要的密钥。

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

  1. sudo -u zabbix ssh [email protected]

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

监控项配置

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

9 SSH检查 - 图1

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

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

参数描述注释
类型在此处选择SSH 代理
键值格式为 ssh.run[unique short description,<ip>,<port>,<encoding>,<ssh options>]unique short description 的唯一(每个主机)监控项键值是必需的,并且每个主机的每个 SSH 监控项都应该是唯一的。

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

ssh 选项 允许以 key1=value1;key2=value2,value3 格式传递其他 SSH 选项。一个键值的多个值可以用逗号分隔传递(在这种情况下,参数必须是 quote);多个选项键值可以用分号分隔传递。支持的选项键和值取决于 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 命令。执行的 shell 命令的返回值限制为 16MB(包括被截断的尾随空格);数据库限制 同样适用。

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

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