프로그래밍/리눅스 쉘 & utils

expect를 이용한 자동화(1) - ssh

Noritorgigi 2013. 9. 3. 21:12
728x90

expect는 리눅스 혹은 유닉스에 있는 script language이다.

일반 쉘을 이용할 경우, ssh, scp, passwd 변경등을 할 때, script로 처리할 수 없고, console창에

interactive하게 입력해야 한다. 이럴 경우에 사용할 수 있는 script language가 expect이다.

expect는 화면에 특정 문자열이 왔을 때, 응답으로 어떤 문자열로 응답하는 식의 처리가 가능하다.

이를 이용해 ssh 자동 접속 쉘, scp 접속 쉘, passwd 변경 쉘 등을 만들어 보겠다.

expect에 대해서 더 정확한 문법을 알고 싶다면, 다음 URL을 참조하기 바란다.

 

 

파일명 

ssh.exp 

 파일 내용

 #!/usr/bin/expect

proc usage {} {
    puts "usage: host id password command"
    exit 1
}

set argc [llength $argv]

if { $argc != 3 } {
    usage
}

set timeout -1
set HOST [lindex $argv 0]
set USERID [lindex $argv 1]
set PASSWD [lindex $argv 2]

spawn ssh $USERID@$HOST

expect {
    -re "No route" { exit 1 }
    -re "try again" { exit 1 }
    -re "yes/no" { send "yes\r"; exp_continue }
    -re "password:" { send "$PASSWD\r"; exp_continue }
}

interact

 실행 방법

 ssh.exp ip_address userid passwd

ex) ssh.exp 10.10.10.1 noritor noritor123

 

위의 표의 파일명과 파일 내용으로 파일을 만든 뒤, 파일 권한을 실행 가능하게 변경한 뒤, 실행방법대로 실행하면 된다. 배포 쉘을

만들 때 꽤 유용하게 쓰인다.

 

 

 

 

728x90