expect的安装详解参考https://blog.csdn.net/jiaxinhong/article/details/134014268?spm=1001.2014.3001.5501
1、expect是什么?
expect 是由Don Libes基于TCL(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。
2、命令速查
spawn:交互程序开始后面跟命令或者指定程序(在壳内启动这个进程)
expect:获取匹配信息匹配成功则执行expect后面的程序动作(检测由壳内进程发出的特定交互指令反馈字符串后向下执行)
send:用于向进程发送字符串(从壳外向壳内进程发送一条字符串,换行符为确认结束)
interact:允许用户交互
exp_continue:在expect中多次匹配就需要用到
send_user:用来打印输出 相当于shell中的echo
exit:退出expect脚本
eof:expect执行结束 退出
set:定义变量
puts:输出变量
set timeout:设置超时时间
3、实例介绍1
set timeout 60
spawn ssh -l 用户名 192.168.10.11
expect "password:"
send "要输入的密码"
interact
对上面代码的分析:
1、设置超时时间为30s
2、spawn 是 expect 的起始语句,可以理解为从此处开始(启动新的进程)
spawn 后面的语句是执行 ssh 连接
3、expect:当发现password:这个字符串后,在后方输入send后面的内容(从进程接收字符串)
4、send:要输入的密码(用于向进程发送字符串)
5、interact:执行完留在远程控制台,不加这句执行完后返回本地控制台(允许用户交互)
4、实例介绍2
#!/usr/bin/expect
set host "192.168.10.11"
set username "root"
set password "123456"
set timeout -1
spawn ssh $username@$host
expect "*password:"
send "$password\r"
interact
#!/usr/bin/expect 使用expect来解释该脚本;
set host "192.168.10.11" 设置连接的主机地址
set username "root" 设置连接的用户名
set password "123456" 设置连接的密码
set timeout -1 设置超时时间永不超时,默认为10s
spawn ssh $username@$host spawn是进入expect环境后才可以执行的expect内部命令,执行ssh
spawn ssh $username@$host spawn是进入expect环境后才可以执行的expect内部命令,执行ssh
expect "*password:" expect是从进程接收字符串,当发送ssh请求时,服务器会返回输入秘密的
字符串,用expect来接收
send "$password\r" send向进程发送字符串,此处是自动输入密码
interact 是expect用来打开用户与产生进程之间通信的命令,就是登陆以后将远程服
务器的终端保持在当前终端,而不是将远程终端关掉