[shell script] 여러 원격 서버에 접속해서 명령 실행하기

rodusik·2022년 7월 26일
0

shell script

목록 보기
1/3
post-thumbnail

로컬 서버에서 스크립트를 실행하면 원격 서버들의 ip를 읽어 각 서버에서 명령을 실행하도록 스크립트를 작성했다.

test.sh

exec < $1

if [ -z $1 ]
then
        echo "ERR: input remote ip. ex) test.sh <ip file>"
else
        while read line
        do
                line=`echo $line | tr -d '\r\n'`
                ssh $USER@$line "mkdir -p $APP_HOME"
                scp $FILE_NAME $USER@$line:$APP_HOME
                ssh $USER@$line "cd $APP_HOME; tar -xvf $FILE_NAME; rm -f $FILE_NAME"
        done
fi

각 리모트 서버에서 실행할 내용
1. $APP_HOME 디렉터리 생성
2. 로컬 서버의 $FILE_NAME 파일을 이전에 생성한 $APP_HOME으로 전송 (파일은 tar.gz이다.)
3. $APP_HOME으로 이동하여 압축 해제 후 tar.gz 파일 삭제

문제는 한 대일 경우 괜찮지만, 여러 서버를 넣고 스크립트를 실행할 경우 처음 한 대에만 적용되고 스크립트가 종료된다.

이럴 때 ssh 명령어에 -n 옵션을 붙여주면 각 서버에서 원하는대로 스크립트 내용을 실행할 수 있다.

exec < $1

if [ -z $1 ]
then
        echo "ERR: input remote ip. ex) test.sh <ip file>"
else
        while read line
        do
                line=`echo $line | tr -d '\r\n'`
                ssh -n$USER@$line "mkdir -p $APP_HOME"
                scp $FILE_NAME $USER@$line:$APP_HOME
                ssh -n $USER@$line "cd $APP_HOME; tar -xvf $FILE_NAME; rm -f $FILE_NAME"
        done
fi

0개의 댓글