expect介绍与使用(实现自动登录)

        Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预,它主要由expect-send组成。使用它系统管理员的可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行。

1、SSH自动登陆主机脚本

#!/usr/bin/expect -f

set timeout 20    #设置后面所有的命令等待时间为20秒
set pwd "admin"
    spawn ssh -l peercome 192.168.199.238    #spawn启动脚本和命令的回话
    expect {              #期望出现的结果(字符),对结果进行对应处理
	"lost connection" {
		spawn ssh-keygen -f "~/lsm/.ssh/known_hosts" -R 192.168.199.238;   #从known_hosts文件中删除所有属于 192.168.199.238 的密钥
		exp_continue
	}
	"(yes/no)" {
		send "yes\n";
		exp_continue
	}
	"password:" {
		send "$pwd\n";
	}
    }
#expect eof   #登陆后退出
interact      #登陆后保留在登陆远程终端上

2、telnet自动登陆主机脚本。

      脚本首先从命令行参数中获取登录主机的IP地址,然后调用相关命令进行登录。

#!/usr/bin/expect                                                                                                                                                                                             

set user "admin"
set pwd "admin"
set ip "[lindex $argv 0]"

puts "telnet to : $ip"

spawn telnet $ip
expect {
    "login" {
        send "$user\n"
        exp_continue
    }
    "Password" {
        send "$pwd"
    }
}
puts "connect to $ip is ok!"
interact

3、获取函数参数

     使用proc定义函数

proc printPerson {name sex age} {
    puts "name: $name"
    puts "sex: $sex"
    puts "age: $age"
}

4、响应规则

expect -re "\[(.*)]:"           #-re代表后面不是普通字符,而是正则表达。查找方括号字符后面跟有零个或多个字符,最后是一个右方括号,将其存放在()中,即匹配结果存放到变量中
if {$expect_out(1,string)!="/bin/tcsh"} {  #当发现一个配置则检查包含在方括号内的字符,查看是否是“/bin/tcsh”。$expect_out访问匹配数组的数据
	send "/bin/tcsh"            #如果匹配不成功发送/bin/tcsh
}
send " "   #发送回车符
expect eof

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值