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だけとか。
手抜きは良くないです!!