Server/Linux

[Linux] expect를 이용하여 쉘스크립트를 실행시켜 다른 서버 원격 접속하여 명령어 날리기

밍글링글링 2022. 11. 30.
728x90

 

#!/bin/sh
USER=root
IP=000.000.000
PW=p@sswOrD

# install expect - important#

expect -c "
spawn ssh -o StrictHostKeyChecking=no $USER@$IP 'example.sh'
expect 'password:'
        send \"$PW\\r\"
expect eof
set timeout 3
"

 

위에서 부터 하나씩 해석을 해보자면,

#!/bin/bash

위 코드는 해당 파일을 bash 쉘로 실행시킨다는 것을 정의하는 것이고.

 

USER, IP, PW 변수로 선언하여 초기화하였다.

 

여기서부터가 중요한대.

expect -c "

 

우리는 expect라는 모듈을 이용할 것이다.

expect 모듈은 커맨드 대화를 상호작용할 수 있도록 도와주는 모듈인데

우리는 비밀번호를 물어보는 질문은 던졌을때 그에 대해 답할 때 쓰이게 된다.

 

spawn ssh -o StrictHostKeyChecking=no $USER@$IP 'example.sh'
expect 'password:'
        send \"$PW\\r\"

ssh -o StrictHostKeyChecking=no $USER@$IP 'example.sh' 이 구문은

ssh -o StrictHostKeyChecking=no $USER@$IP 변수로 선언된 USER와 IP에 해당하는 서버에 접속 한다는 의미이고,

example.sh는 접속하는 원격서버에 파일을 접속하고 바로 실행시킨다는 의미이다. 이 해당 파일을 기입하지 않아도 된다.

 

그리고.. 서버 접속시 비밀번호를 물어보게 된다...

이때! expect를 사용한다.

'password:' 라는 질문이 던져오면 send "$PW" 변수 PW를 답을 줘서 해당 서버에 접속한다.

 

expect eof
"

이렇게 expect가 종료된다.

728x90

댓글