Server/Linux
[Linux] expect를 이용하여 쉘스크립트를 실행시켜 다른 서버 원격 접속하여 명령어 날리기
밍글링글링
2022. 11. 30. 16:55
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