11 SSH エージェント

概要

SSHチェックはエージェントレス監視として実行されます。SSHチェックには Zabbix エージェントは不要です。

SSHチェックを実行するには、まず Zabbix サーバーを SSH2 サポート(libssh または libssh2)付きで 設定する必要があります。あわせて 要件も参照してください。

RHEL 8 以降では、libssh のみがサポートされます。その他のディストリビューションでは、libssh2 よりも libssh の使用が推奨されます。

設定

パスフレーズ認証

SSHチェックは、ユーザー/パスワードのペアとキーファイルベースの2つの認証方法を提供します。

キーを使用しない場合は、ソースからビルドする場合にlibsshまたはlibssh2をZabbixにリンクする以外に、追加の設定は必要ありません。

キーファイル認証

SSHアイテムで鍵ベースの認証を使用するには、サーバー設定にいくつかの変更が必要です。

Zabbix サーバーの設定ファイル (zabbix_server.conf) を root として開き、次の行を探します。

# SSHKeyLocation=

このコメントを解除し、公開鍵と秘密鍵が配置されるフォルダへの 完全なパスを設定します。

SSHKeyLocation=/home/zabbix/.ssh

ファイルを保存し、その後 Zabbix サーバーを再起動します。

ここでの /home/zabbixzabbix ユーザーアカウントのホームディレクトリであり、 .ssh は、デフォルトで公開鍵と秘密鍵が ssh-keygen コマンドによってホームディレクトリ内に生成されるディレクトリです。

通常、さまざまな OS ディストリビューション向けの Zabbix サーバーのインストールパッケージでは、 zabbix ユーザーアカウントのホームディレクトリが別の場所、たとえば /var/lib/zabbix(システムアカウントの場合)に作成されます。

鍵を生成する前に、ホームディレクトリを /home/zabbix に再配置して、 前述の Zabbix サーバー設定パラメータ SSHKeyLocation と 一致させることができます。

installation section の手順に従って 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 ではサポートされない可能性があります。

シェル設定フォーム

この手順は、SSHチェックで監視される各ホストごとに1回だけ実行する必要があります。

以下のコマンドを使用して、公開鍵ファイルをリモートホスト 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ログインを確認できるようになります。

sudo -u zabbix ssh [email protected]

ログインが成功した場合、シェルでの設定は完了し、リモート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 オプションを指定できます。1 つのキーに複数の値を指定する場合はカンマで区切ります(この場合、パラメーターは 引用符で囲む 必要があります)。複数のオプションキーはセミコロンで区切って指定できます。

サポートされるオプションキーは次のとおりです: 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 リモートセッションを使用して実行するシェルコマンド。 実行されたシェルコマンドの戻り値は 16MB までに制限されます(末尾の空白は切り捨てられます)。データベースの制限 も適用されます。

libssh2 ライブラリでは、実行可能スクリプトが \~32kB に切り詰められる場合があることに注意してください。

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

例(NETCONF サブシステムの場合):
<rpc>
<get-software-information/>
</rpc>
]]>]]>
<rpc>
<close-session/>
</rpc>
]]>]]>