9 SSH チェック

概要

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

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

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

設定

パスフレーズ認証

SSHチェックでは、2つの認証方法を利用できます。ユーザー名/パスワードの組み合わせと、キーファイルベースの認証です。

キーを使用しない場合、ソースからビルドしているときにlibsshまたはlibssh2をZabbixにリンクすることを除き、追加の設定は不要です。

キーファイル認証

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

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

# 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):
<空のままにする>
# Enter same passphrase again: 
<空のままにする>
# 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アイテムで固有の情報が必要なフィールドは次のとおりです。

パラメータ 説明 コメント
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つのキーに対して複数の値を渡す場合はカンマで区切ります(この場合、パラメータは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 または
Key passphrase
認証用のパスワード(最大255文字)または
秘密鍵に使用されている場合のパスフレーズ。
パスフレーズを使用していない場合は、Key passphrase フィールドを空のままにしてください。
known issues のパスフレーズ使用に関する記述も参照してください。
Executed script SSHリモートセッションを使用して実行されるシェルコマンド。 実行されたシェルコマンドの戻り値は16MBに制限されます(切り詰められる末尾の空白を含む)。また、database limits も適用されます。

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

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

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