Centos 7では、エイリアスは機能しません。

Centos 7では、エイリアスは機能しません。

checkmk MRPEプラグインを使用して監督のカスタム監視を設定しようとしています。チェック(bashシェルスクリプト)はシェルの内部ではうまく機能しますが、外部Telnetでは出力を取得できません。

問題は、管理者パスワードの割り当てに関連するユーザーエイリアスのようですが、機能しません。したがって、出力が正しくありません。

シェルスクリプトと/ etc / profileにエイリアスを追加しましたが、checkmkエージェントはまだそれを正しく呼び出しません。

私が何を見逃しているのか知っていますか?

#!/bin/bash
shopt -s expand_aliases
alias hammer='hammer -u admin -p XXXXXXXXXXX'
STATE_OK=0
STATE_CRITICAL=2
STATUS=`hammer capsule content synchronization-status --id 11|grep Status:|grep "Capsule is synchronized"`
RET_VAL=$?
if [ "$RET_VAL" != "0" ]
then
ERR_STATUS=`hammer capsule content synchronization-status --id 11|grep -i status|cut -d ":" -f 3`
echo "$ERR_STATUS needs to be synced."
exit $STATE_CRITICAL
else
echo "Capsule is synchronized."
exit $STATE_OK
fi

ベストアンサー1

特に、スクリプトではエイリアスを使用しないことをお勧めします。ここで私は次のように書きます:

#!/bin/bash -
typeset -A code=([OK]=0 [WARNING]=1 [CRITICAL]=2 [UNKNOWN]=3)

hammer() {
  command hammer -u admin -p XXXXXXXXXXX "$@"
}

result=UNKNOWN
if
  status=$(
    hammer capsule content synchronization-status --id 11|
      grep 'Status:'
  )
then
  if
    [[ $status = *'Capsule is synchronized'* ]]
  then
    message='Capsule is synchronized.'
    result=OK
  else
    message="$status needs to be synced."
    result=CRITICAL
  fi
else
  message="Can't determine status."
fi

printf '%s\n' "$result - $message"
exit "${code[$result]}"

いずれにせよ、インタプリタスクリプトを起動した/etc/profileシェルはrcファイルを読みません((t)csh1を除く)。スクリプトが呼び出すユーザーと場所に基づいていると想像してください~/.shellrc

コマンドラインからパスワードを渡すのは悪い習慣です。これは、システムに関する公開情報(出力に表示されps -fログに残ることがある)であるためです。それが何であるかはわかりませんが、hammerパスフレーズ(環境変数、ファイル記述子、またはconfファイルなど)よりも安全な代替手段を提供する可能性が高く、そうでない場合は設計上破損しています。


¹これが#! /bin/csh -fShebang を使う理由です。ただし、少なくともスクリプトには(t)cshをすべて使用しないことをお勧めします。

おすすめ記事