11 SSH agent
概述
SSH 检查作为无 agent 监控执行。执行 SSH 检查不需要 Zabbix agent。
要执行 SSH 检查,Zabbix 服务器必须首先启用 SSH2 支持(libssh 或 libssh2)进行配置。另请参见: 要求。
从 RHEL 8 开始,仅支持 libssh。对于其他发行版,建议使用 libssh 而不是 libssh2。
配置
密码验证
SSH 检查提供两种验证方法 - 用户/密码对和基于密钥文件。
如果您不打算使用密钥,则无需进行其他配置,除了将 libssh 或 libssh2 链接到 Zabbix(如果您从源代码构建)之外。
密钥文件认证
要为 SSH 监控项使用基于密钥的认证,需要对服务器配置进行一些更改。
以 root 身份打开 Zabbix 服务器配置文件
(zabbix_server.conf),并查找以下行:
# SSHKeyLocation=
取消注释,并将其设置为公钥和私钥所在文件夹的完整路径:
SSHKeyLocation=/home/zabbix/.ssh
保存文件,然后重启 Zabbix 服务器。
这里的路径 /home/zabbix 是 zabbix 用户账户的主目录, 而 .ssh 是一个目录,默认情况下,公钥和私钥会通过 ssh-keygen 命令在主目录中生成。
通常,不同 OS 发行版提供的 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):
<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 目录中,
这与 Zabbix 服务器的 SSHKeyLocation 配置
参数相对应。
除 "rsa" 之外的其他密钥类型可能被 ssh-keygen 工具和 SSH 服务器支持,但 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 会话。
监控项配置
实际要执行的命令必须放在监控项配置中的 Executed script 字段里。 可以通过将多个命令逐行放置来依次执行。在这种情况下,返回值也会以多行格式显示。

所有必填输入字段都用红色星号标记。
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 允许以 key1=value1;key2=value2,value3 的格式传递额外的 SSH 选项。一个键可以传递多个值,并用逗号分隔(在这种情况下,参数必须为 quoted);多个选项键可以用分号分隔。 支持以下选项键: 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 远程会话执行的 shell 命令。 | 已执行 shell 命令的返回值上限为 16MB(包括会被截断的尾随空白);数据库限制 也同样适用。 请注意,libssh2 库可能会将可执行脚本截断为 \~32kB。 示例: date +%ssystemctl status mysql-serverps auxww \| grep httpd \| wc -l示例(用于 NETCONF 子系统): <rpc><get-software-information/></rpc>]]>]]><rpc><close-session/></rpc>]]>]]> |