본문 바로가기
프로그래밍/리눅스 쉘 & utils

expect를 이용한 자동화(3) - 원격 장비 passwd 변경

by Noritorgigi 2013. 9. 3.
728x90

expect에 대한 설명은 expect를 이용한 자동화(1) - ssh 를 참조하기 바란다.

여기서는 expect를 이용해서 원격 장비의 passwd를 자동으로 변경하는 쉘을 만들어 보겠다. 서버가 여러 대일 경우, 동시에 passwd변경 시 유용하게 사용할 수 있다.

 

파일명 

passwd.exp 

 파일 내용

 #!/usr/bin/expect

proc usage {} {
    puts "usage: ip_address old_password new_passwd"
    exit 1
}

set argc [llength $argv]

if { $argc != 4 } {
    usage
}

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

spawn ssh $USERID@$HOST "passwd"

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 }
    -re "UNIX 암호:" { send "$PASSWD\r"; exp_continue }
    -re "새  암호:" { send "$NEWPW\r"; exp_continue }
    -re "재입력:" { send "$NEWPW\r"; exp_continue }
}

exit 0

 실행 방법

 passwd.exp  ip_address old_passwd new_passwd

ex) passwd.exp 10.10.10.1 noritor noritor123 noritor12345

 

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

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

728x90