用expect进行iLO远程配置
这里是脚本,用途是用 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。