본문 바로가기

Study/Linux

너무나 강력한 expect

한참동안 서버에서 작업중인것이 있었는데.

반복적인 일이였습니다.

모 언듯보면 다르지만..

그래서 스크립트를 만들어 사용했는데
bash 하고 expect 입니다.

두개의 경우를 갈라서 말하면
간단한 복사라던지 scp 라던지 단순한 작업음 bash로 되지만

예를들어 만들어진 다른 스크립트를 실행해야한던지, SSH를 통해 다른 서버에 작업을 해야한다든지 이런 복잡한 작업은 expect 로 해결하셔야 합니다.

제가 전 글에 tcl 문법이라는걸 올렸는데. expect가 tcl 문법이더군요.

약간의 팁을 드지면

expect같은경우 끝날때 interact를 사용한다고 합니다. 몇몇분들의 글을 보면 쉘이 프로그램을 실행하고 나서 그다음 실행할수 있는 권한을 유저에게 돌려준다고 있던것 같습니다.

그런데 이걸 응용할수가 있는것이.
저같은 경우는 제가 만들어논 스크립트를 돌려가면서 써야되는데
예를들어 1.sh 하고 2.sh가 있다고 가정하면

만약 expect안에서
spawn 1.sh
spawn 2.sh하면 결론은 아마도 2.sh밖에 실행이 안될겁니다. 몰랄까 지금 tcl이라던지 expect를 급하게 공부해서 사용중이라 어떻게 설명을 못드리겟는데.

만약 두개의 쉘이라던지 응용프로그램을 실행하셔야 한다면 (순차적으로, 여기에 좀더 복잡한 개념은 저도 모르므ㅗㄹ0
spawn 1.sh
interact
spawn 2.sh
interact

하면 순차적으로 사용할수 있습니다.

그다음 send의 용도인데
여기에는 bash에 echo 가 동일한 기능이 어떤건지 모르겠습니다. put으로 쓰던것 같은데
send로 도 동일하게 사용할수 있습니다.

그런데 그용도보다는

예를들어 저는 여러개의 서버를 RSA인증을 통하여 사용하는데
예를들어 1234 서버를 돌아다니면서 특정 명령어를 내려줘야된다면
expect
안에서는
spawn ssh user@server1
이렇게 들어갈수 있겠죠
문제는 그다음입니다.

만약 필요한 명령어를 쓴다고 가정한다면
spawn ssh user@server
접속한 서버안에서 쓴다고 할때
interact
하고 spawn하면 아마 ssh를 들어간  그냥 아무런 변화도 없을것입니다 단지 접속한 다른 ssh 에서 입력을 기다리고 있을겁니다.
그리고 exit하고 나오는순간
그 명령은 들어가기전 서버에서 실행될것입니다.

그러면 이럴경우 어떻게 해야되냐
위에서 잠깐 언급한 send를 사용하시면 됩니다.

spawn ssh user@server
send "사용할 명령어\n"
send "exit\n"
interact

제식으로 표현하면 이렇게 되겠네요;; 저도 오늘 expect를 잠깐 공부하고 자동화 시켜논거라
문법적 해석은 못하겠지만 일종의 send는 그냥 저 스트링을 보내주는건지 모르겠는데; 보내주는것 같습니다.
\n 은 보나마나 개행일테고..
저렇게 하면 명령어가 쳐지고
물론 exit할 필요가 없지만 약간의 목적이 ssh를 돌아다니면서 명령어를 치는거였으니가

저런식으로 사용하면 ssh user@server에 접속해서(앞에서 말씀드렸습니다만 저는 암호 임력을 RSA인증을 사용하기 때문)
서버에 들어간다음에 명령어가 쳐지고 그 서버가 로그아웃되는것까지 보실수 있을겁니다.

완전 초보이지만 강력한 expect에 반한 한 사람의 글이였습니다.

2012/01/18 - [Study/Linux] - tcl 문법


'Study > Linux' 카테고리의 다른 글

linux grep  (0) 2012.01.25
expect 스크립트를 사용하여 다른서버에서 sudo 사용하기  (0) 2012.01.20
Secure CRT 설정  (0) 2012.01.20
tcl 문법  (0) 2012.01.18
우분투 기본 방화벽  (0) 2012.01.15
ssh RSA로 접속 불가능시  (0) 2012.01.09