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 設定パラメータと一致させることができます。

インストール セクション に従って 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 ではサポートされない可能性があります。

シェル設定フォーム

この手順は、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 です。
# 接続を続行してもよろしいですか (yes/no)?
yes
# 警告: '10.10.10.10' (RSA) を既知のホストの一覧に恒久的に追加しました。
# [email protected] のパスワード:
<root パスワードを入力>
# 次に "ssh '[email protected]'" でマシンにログインしてみて、
# 追加されたのが意図した鍵のみであることを確認してください。

これで、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>] 形式の、ホストごとに一意なアイテムキー。 unique short description は必須で、各ホストの各 SSH アイテムで一意である必要があります。

デフォルトのポートは 22 であり、このアイテムが割り当てられているインターフェースで指定されたポートではありません。

ssh options では、key1=value1;key2=value2,value3 形式で追加の SSH オプションを指定できます。1 つのキーに複数の値を指定する場合はカンマで区切ります(この場合、パラメーターは 引用符で囲む 必要があります)。複数のオプションキーはセミコロンで区切って指定できます。

次のオプションキーがサポートされています: 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"]
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