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을 표시하는 것입니다.