zabbixでzabbix agent経由でリモートサーバでコマンドを実行するとき、sudoを使用するとエラーが発生。

# zabbix_get -s {リモートサーバ} -k system.run["sudo ls /root"]
sudo: sudo を実行するには tty がなければいけません。すみません

「sudo を実行するには tty がなければいけません。すみません」

いえいえ、ご丁寧に、こちらこそなんかすみません。。

基本的にsudoはtty(標準入出力となっている端末デバイス)が必要らしい。よくわからんが、リモートで操作はできないってことかと。

リモートでsudoを利用するには「端末なしでsudoを実行するための設定」が必要らしい。

visudoで/etc/sudoersを編集 Defaults requirettyをコメントアウトする。

# visudo
Defaults requiretty
↓
#Defaults requiretty

これでzabbix agent経由でsudoが使用可能に!

# zabbix_get -s {リモートサーバ} -k system.run["sudo ls /root"]
anaconda-ks.cfg

しかし、感の良い人は気づいたはず。これだと全ユーザー端末無しでsudo使えるじゃん。。

zabbix agentはzabbixユーザーでコマンドを実行するため、zabbixユーザーのみtty無しで実行できるように修正します。

# visudo
Defaults requiretty
Defaults:zabbix !requiretty

リモートで操作する時はセキュリティは重要です。本当はzabbixユーザでsudoできるコマンドを制限したほうがいいかと。zabbix_getだけとか。

手抜きは良くないです!!