我有分寸

用expect进行iLO远程配置

gnawux expectiLOscriptsssh

这里是脚本,用途是用 SSH 访问一组指定 ip 的 ilo,执行指定的一组命令,这个例子里是重新设置 IP

#!/usr/bin/expect
set hostfile     [open [lindex $argv 0] ]
set cmdfile     [open [lindex $argv 1] ]
set prompt     ".*iLO->\ "
set passprompt     ".*password:\ "
set rejprompt     ".*refused"
set password    "mypasswd\r"
set timeout    20
set origprefix 192.168.1.
set newprefix 192.168.39.
while {[gets $hostfile h] >0} {
    seek $cmdfile 0
    spawn ssh $origprefix$h
    for {} {1} {} {
        expect {
            "$rejprompt" { puts "refused";break }
            "$passprompt" { send "$password" }
            "$prompt" {
                while { [gets $cmdfile c] > 0 } {
                    send "$c\r" ;
                }
                send "set SubnetMask=255.255.248.0 IPv4Address=$newprefix$h\r"
                expect $prompt
                break
            }
            timeout {puts "timeout"; break}
        }
    }
}
close $hostfile
close $cmdfile

这个脚本接受两个参数,ip尾号列表文件,如下:

85
86
87
88
89
90
91

和 iLO 命令列表文件:

cd map1
cd enetport1
cd lanendpt1
cd ipendpt1

这个脚本有一点特别之处——最后一个操作是设置 IP 地址,设置生效之后 SSH 连接就会自动断开,因此没有 close。

gnawux
me!#$!@#$@#$wangxu!@#$%^&*()_me