Linux 여러 대 서버에 ssh 접근 후 shell 파일 실행하기

 

 

 

여러대의 vm 서버에 동시에 명령어를 날려야 하는 경우가 생겼다.

 

해당 서버들의 ip 를 목록으로 만들고 반복문으로 ssh 를 접근해서 명령어를 실행하면 되지 않을까 싶어 소스를 만들어보았다.

 

1
2
3
4
5
6
7
IP_LIST=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4" "10.10.10.5")
 
for VALUE in "${IP_LIST[@]}"do
    ssh -22 centos@$VALUE <<EOF
    sh < /temp.sh
EOF
done
cs

1# : 접근해야 하는 IP 목록

3# : IP 목록으로 반복문 실행

4# : 해당 IP로 ssh 접근

5# : 접근 후 sh 파일 실행

 



 

아주 심플한 소스를 만들었다.

 

그런데 조금의 문제가 있다.

 

위 반복문은 ssh 접근 후 temp.sh 파일의 실행이 끝날때 까지 대기 하고 끝나면 다음 서버에 접근하게 된다.

 

temp.sh 파일을 실행할 때 백그라운드에서 실행시킬 필요가 있다.

 

그래서 동시에 반복문을 돌면서 호출을 할 수 있다.

 

1
2
3
4
5
6
7
IP_LIST=("10.10.10.1" "10.10.10.2" "10.10.10.3" "10.10.10.4" "10.10.10.5")
 
for VALUE in "${IP_LIST[@]}"do
    ssh -22 centos@$VALUE <<EOF
    nohup sh < /temp.sh >> '/temp.log' &
EOF
done
cs

5# 처럼 nohup 명령어를 사용해서 사용자가 로그아웃 되더라도 프로세스가 백그라운드에서 실행하도록 해야 한다.

 

추가적으로 해당 쉘파일을 실행하면서 나오는 로그(출력, 오류 등) 들도 파일로 저장시켰다.

 



 

> (꺽쇠) 가 하나아면 계속 덮어쓰고 >> (꺽쇠)가 두개이면 이어쓰기를 한다.

 

 

 

 

by 개발자 CofS 2019.02.22 11:13