bash 와 expect는 문법도 다르고 방식도 다르다.
bash 는 스크립트 기반으로 명령을 실행한다면 expect의 경우에는 리모트 서버에 접속하여prompt를 통해서 명령을 실행 할 수 있다.
예를 들면 ssh를 통해서 명령어를 실행할 경우
bash: ssh 계정@서버:명령어
expect: ssh 계정@서버 접속 후 prompt에서 명령어 실행 후 exit
이번에 bash 와 expect를 동시에 사용하기 위해서 스크립트를 만들었다.
#!/bin/bash
DEPLOY_BASE=/home/ansible/expect
DOMAIN="$1"
SERVICE="$2"
LIST="$DOMAIN"_"$SERVICE"_serverlist
USER=root
PASSWD=root
if [ -e "$LIST" ]; then
for hostip in `cat $DEPLOY_BASE/$LIST`; do
echo -e "\\n able to connect $hostip \\n"
# 여기서 부터 expect 를 실행한다. EOF는 end of file
expect << EOF
spawn ssh -o StrictHostKeyChecking=no $USER@$hostip
expect -re "password:"
send "$PASSWD\r"
expect -re "Last login:"
send "exit \r"
# expect 종료.
EOF
done
else
echo -e "\\n # [ERROR] Can not found $LIST file \\n"
fi
단순 ssh 접속 테스트를 하기 위한 스크립트 이고 serverlist 파일에는 접속하려는 ip가 있어야 한다.
이 스크립트 기반으로 응용하면 다른 명령어들도 실행이 가능하다.
댓글 없음:
댓글 쓰기