상세 컨텐츠

본문 제목

2020.12.11 sftp shell script expect automation

보안/unix(유닉스)

by MustThanks 2020. 12. 11. 19:07

본문

반응형

expect [ -dDinN ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]

 

script 파일에 포함할 때 위 구문으로 시작
/usr/local/bin/expect에는 expect가 설치된 정확한 위치 지정.

  • -c : script 실행전에 수행해야할 command 지정
  • -d :
  • -D : 디버그 모드 실행.
  • -f : 파일로 부터 실행 구문을 읽어들임.
  • -i : expect shell(? prompt방식). 나갈때는 exit
  • -v : 버전 정보

 

expect 명령어 사용

 

keyword

spawn   : 명령어  실행 
expect    “특정문자열”   : “if 특정 문자열이 나타나면”  의미
send      “보낼문자열\r”  : 문자열을 전송한다. \r은 엔터키를 의미한다.
interact  : 이제는 expect를 끝내고 사용자에게 제어권을 넘긴다.
set 변수 [lindex $argv 0]       : 0번째 명령행 인자를 변수에 지정한다.
send “$변수”                     : 변수에 저장된 문자열을 전송한다.
expect eof                       : expect 종료

 

재정리

  1. expect: 패턴이 일치한 경우 실행 .
  2. send: 프로세스를 통해 원격 서버에 문자열 전송
  3. spawn: 프로그램을 실행하여 새로운 프로세스를 생성
  4. send_user: stdout을 사용자에게 전송 . (send → remote, send_user → local)
  5. interact: 프로세스를 제어하여 상호 작용할 때 사용을하며 사용자에게 제어권을 넘김
  6. log_user: 기본적으로 stdout 표시  stdout을 제외하려면 0으로 설정 . (log_user 0)
  7. exp_internal: expect 디버그 로그  
  8. set: 변수를 설정하는 방법  
  9. close: 프로세스 연결을 종료  

 

option

-nocase : 대소문자 구별안함

 

실행시키는 방법

sh sample.exp port targetId targetIp targetPass worksPath targetPath

 

=======================sample.exp=====================

 

#!/sh/expect

 

toDay=todayValue= `date +%Y%m%d`

#하루전
yesterdayValue= `TZ=KST+15;date +%Y%m%d` 

#하루전 + 24시간
yesterdayValueAddOneDay= `TZ=KST+39;date +%Y%m%d`

port=$1
hostId=$2
hostIp=$3
targetPass=$4
worksPath=$5
targetPath=$6

expect -c "

spawn sftp -oPort=$port  BatchMode=\"no\" $hostId@$hostIp

expect -nocase \"*password:\"   {  send \"targetPass\r\";  }

expect -nocase \"sftp>\"   {  send \" get  $targetFileName \r\";  }

expect -nocase \"sftp>\"   {  send \" exit \r\"; interact }

"

exit

cd     $worksPath
mkdir $targetPath/$todayValue

mv $worksPath/* $targetPath/$todayValue/

 

 

==================================================

 

 

관련글 더보기

댓글 영역