Главная
expect
Рейтинг пользователей: / 0
ХудшийЛучший 
blogs - boba
Автор: BoBa   
07.07.2009 15:42

надоело использовать nc в скрипте для автоматического конфигурирования кучи железяк по телнету... и глючно и не удобно, и железяки порой калечит... в общем родилось следующее:

 

bender:

#!/bin/sh

#########

#BoBa 2009, http://boba.su

##########################

#usage: bender brend ipfile username password cmdfile

#####################################################

 

for i in `cat $2`;

do

    ./$1_bender $i $3 $4 $5 | tee -a $2_$5.log

done 

 

dlink_bender:

#!/usr/bin/expect -f

####################

#BoBa 2009, http://boba.su

##########################

#usage: dlink_bender ip usename password cmdfile

################################################

 

set user "user"

set pass "pass1"

set ena  "pass2"

 

set fp [open [lindex $argv 3] r]

set cmds [read $fp]

close $fp

set cmdlist [ split $cmds "\n" ]

 

spawn telnet [lindex $argv 0]

expect {

    "ame:" {send "[lindex $argv 1]\r"}

    timeout {exit}

}

expect "ord:" {send "[lindex $argv 2]\r"}

expect {

    "#" {

        send "ena adm\r"

        expect {

            "ord:" {

                send "$ena\r"

                expect {

                    "Fail!" {exit}

                    "DES" {}

                }

            }

            "You already have" {}

        }

    }

    -re "Fail|Timeout" {

        send "$user\r"

        expect "ord:" {send "$pass\r"}

        expect {

            "Fail!" {exit}

            "DES" {}

        }

    }

}

 

foreach cmd $cmdlist {

    expect "#"

    send "[subst $cmd]\r"

    expect {

        "Next possible completions:" {break}

        "Success." {}

        "DES" {}

    }

}

 

expect "#"    {send "logout\r"}

expect eof

 

cisco_bender:

#!/usr/bin/expect -f

####################

#BoBa 2009, http://boba.su

##########################

#usage: cisco_bender ip username password cmdfile

#################################################

 

set fp [open [lindex $argv 3] r]

set cmds [read $fp]

close $fp

set cmdlist [ split $cmds "\n" ]

 

spawn telnet [lindex $argv 0]

expect {

    "ame:" {send "[lindex $argv 1]\r"}

    timeout {exit}

}

expect "ord:" {send "[lindex $argv 2]\r"}

expect "#"

 

foreach cmd $cmdlist {

    send "[subst $cmd]\r"

    expect {

        -re "Invalid|Ambiguous" {break}

        "#" {}

    }

}

 

send "logout\r"

expect eof

 

в планах адреса брать не только из файла но и целыми подсетями оперировать. но пока только в планах ;) 

LAST_UPDATED2