SSH: 원격 변수

SSH: 원격 변수

SSH를 통해 복잡한 스크립트를 실행하고 싶습니다

#!/bin/sh

ARRAY1=(
server1s
server123
server12
server14
server13
)


for i in ${ARRAY1[@]};do ssh  $i "
    case \$HOSTNAME in 

server1.domain.com)
echo try1
  ;;
server12.domain.com)
echo try12
  ;;
*)
echo try123
  ;;
esac

문제는 ssh가 내 내부 호스트 이름 변수를 읽고 try123을 반환한다는 것입니다. 원격 사이트의 내부 변수를 읽는 것이 가능합니까? \$VARIABLE 및 $VARIABLE을 시도했지만 결과는 동일합니다.

답변1

이 경우 \$HOSTNAME변수를 이스케이프하는 올바른 방법은 다음을 사용하는 것입니다.

그러나 이 변수는 일반적으로 호스트 이름(FQDN 아님)을 포함하거나 채워지지 않을 수 있습니다. hostname -f서버 FQDN을 얻으려면 이 명령을 사용해야 합니다 .

최종 스크립트가 어떻게 보일지는 모르겠지만 server1해당 서버를 연결하고 확인하는 것은 server1(보안 목적으로) 어떻게든 쓸모가 없을 수 있습니다.

script1.sh다음 과 같은 스크립트를 작성할 수 있습니다.

echo "$HOSTNAME / $(hostname -f)"

그 다음에

for i in ${ARRAY1[@]};do
    case $i in
      server1) ssh $i < script1.sh
      ;;
      server2) ssh $i < script2.sh
      ;;
      *) ssh $i < script_${i}.sh
    esac
 done 

편집하다:의견에서 언급했듯이 OpenBSD 배포판은 옵션을 hostname이해하지 못합니다 -f. 기본 동작은 FQDN을 표시하는 것입니다.

관련 정보