scp를 이용하여서 파일을 받아 온다 .치면


sudo scp -r test@192.168.1.11:~/Test/Tmp 에서 받아오는데 이 이후에


password :입력과

DNS어쩌구 머시기 yes를 해주어야 한다. 


이 부분을 매번 테스트할때마다 받아오기도 귀찮고 그냥 ./scp.sh 하면안될까 싶어서 찾아보니 expect 로 한댄다.


그래서 expect 가설치 되어있는지 확인을 하여야 하기 때문에


터미널에서 그냥 expect 라고 입력시 not found 뜨면 설치를 해주어야 한다. 


저는 Unix시스템에서 작업을 하기 때문에 Unix기준으로 보면


pkg search expect 해당 커널 버전에 따라서 이렇게 나오게 됩니다. 


 

순수 expect 입력시 not found command가 뜬다면 pkg install expect 로 설치를 해주세요 


repository 가 없다면


expect  http://www.nist.gov/el/msid/expect.cfm

tcl   http://tcl.sourceforge.net/ 에서 설치를 해주셔야 합니다.


repository 없이는 tcl까지 설치 하여야 합니다.


기본적인 루틴


spwan (지정된 어플리케이션을 실행)

send (명령 실행)

expect -re(기대 값 설정)

interact (스크립트 종료)


#!/bin/sh 으로 실행하게되면 not found가 뜰수가 있는데


sh 혹은 bash 쉘에 expect 를 넣어 서사용하는방식이


expect << EOL 을 넣어 주면 사용할수 있다.


아주 간단한것부터 시작ㅇ르 해본다.


test라는 계정으로 접속하여 192.168.1.11 서버에 /home/Test/Temp 라는 폴더를 /home/Test/Tmp 라는 폴더(현재서버)로 가져올려고 한다.

scp명령자체에 sudo를 걸어서 가져올려고 한다. 그럴시에 PassWord입력이 2개가 뜨게 된다.



그렇기 때문에 대략적인 스크립트를 적어 본다면 


#!/bin/sh/

expect << EOL

spawn sudo scp -r test@192.168.1.11:~/Test/Temp /home/Test/Tmp

expect "Password*" // 처음 나타난 메시지중에 Password로 시작하는 메시지를 기대한다.

sleep 0.5                // 0.5초 쉬고 

send "1234\r"        // 1234를 입력하고 캐리지 리턴 (\r)엔터 입력 

expect "Password*"    // 두번째 나타난 메시지 중에 Password로 시작하는 메시지를 기대한다.

sleep 0.5                //0.5초 쉬고 

send "1234\r"        //1234 입력 후 엔터 


interact


로 나타날수 있다.




해당 스크립트는 쓸모가 없다. (쓸수도 없고...)


2탄으로 다시 작성하도록 하겠습니다.





'GNU > bashShell' 카테고리의 다른 글

UNIX Shell while 반복  (0) 2016.08.16
expect 를 이용한 scp 자동 스크립트 작성 - 2  (0) 2016.06.28
UNIX 공백에 대한 변수명 사용시  (0) 2016.06.17
UNIX set 명령어  (0) 2016.06.15
UNIX Shell 조건문  (0) 2016.06.15

+ Recent posts