Centos 7에서 별칭이 작동하지 않습니다.

Centos 7에서 별칭이 작동하지 않습니다.

checkmk MRPE 플러그인을 사용하여 감독에 대한 사용자 정의 모니터링을 설정하려고 합니다. 검사(bash 쉘 스크립트)는 쉘 내부에서는 잘 작동하지만 외부 텔넷에서는 출력을 얻을 수 없습니다.

문제는 관리자 비밀번호 할당과 관련된 사용자 별칭인 것 같지만 작동하지 않습니다. 따라서 출력이 올바르지 않습니다.

쉘 스크립트와 /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 -f바로 Shebang을 사용하는 이유입니다. 하지만 적어도 스크립팅에는 (t)csh를 모두 사용하지 않는 것이 가장 좋습니다.

관련 정보