脚本: sshcmd.sh
#!/usr/bin/expect
#参数数量判断
if {$argc < 2} {
puts "输入格式:./sshcmd.sh <主机Ip列表文件> <待上传的文件>"
exit 1
}
#超时时间
set timeout 10
set list_file [ lindex $argv 0 ]
set waitUpFile [ lindex $argv 1 ]
send_user $list_file
send_user "\r\n"
send_user $waitUpFile
send_user "\r\n"
set user "root"
#轮询索引
set index 0
#读取文件
set fp [open $list_file r]
puts "============== start ==============="
#一行一行读取
while {[gets $fp line] != -1} {
incr index
#解析单行内容
set arr [split $line ","]
set name [lindex $arr 0]
set Ip [lindex $arr 1]
set PassWd [lindex $arr 2]
set targetDir [lindex $arr 3]
set command "cd $targetDir"
set command2 "tar -xzvf $waitUpFile"
set command3 "exit"
puts "\n------------------- 处理第: $index 条:$name $Ip"
#开启追踪spawn
spawn ssh $user@$Ip
#匹配条件,捕捉
expect {
"yes/no" {
send "yes\r"; exp_continue }
"password:" {
send "$PassWd\r" }
}
expect "# " {
send "$command\r$command2\r$command3\r"}
#权限转交控制台
interact
sleep 1
}
远程设备配置,test.txt
执行命令:
sshcmd.sh test.txt Update.tgz