Shll编程之Expect免交互
发表于:2025-02-16 作者:千家信息网编辑
千家信息网最后更新 2025年02月16日,Shll编程之Expect免交互1.Expect概述2.Expect安装(底层语言Tcl)3.Expect基本命令4.Expect执行方式5.Expect案例Expect概述:1.Expect是建立在
千家信息网最后更新 2025年02月16日Shll编程之Expect免交互
Shll编程之Expect免交互
1.Expect概述
2.Expect安装(底层语言Tcl)
3.Expect基本命令
4.Expect执行方式
5.Expect案例
Expect概述:
1.Expect是建立在tcl语言基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的linux运维很有帮助。
2.在linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互的过程,可能会余姚输入yes/no password等信息。为了模拟这种输入,可以使用Expect脚本。
Expect安装
1.挂载光盘
2.制作本地YUM源
执行安装命令:yum -y intall expect
基本命令:
1.send:向进程发送字符串,用于模拟用户的输入
该命令不能自动回车换行,一般要加\r(回车)
2.expect
expect的一个内部命令判断上次输出结果里是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
只能捕捉由spawn启动的进程的输出
#####3.spawn:启动进程,并跟踪后续交互信息
4.interact:执行完成后保持交互状态,把控制权交给控制台
5.Timeout:指定超时时间,过期则继续执行后续指令
单位是:秒
timeout -1为永不超时
默认情况下,timeout是10秒
6.exp_continue
允许expect继续向下执行指令
7.send_user:
回显命令,相当于echo
8.$argv参数数组:
Expect脚本可以接受从bash传递的参数,可以使用[lindex $argv n]获得,n从0开始,分别表示第一个,第二个,第三个....参数
9.Expect脚本必须以interact或expect ecof结束,执行自动化任务通常expect eof就够了
expect eof实在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记
Expect执行方式:
直接执行
[root@ce~]#more a.sh#!/usr/bin/expect //Expect二进制文件的路径 set timeout 60 //60秒等待时间 log_file test.log //日志文件 log_user 1 //日志用户 set hostname [lindex $argv 0] //追加参数0,统计变量,加载第1位置 set password [lindex $argv 1] //追加参数1,统计变量,加载第2位置 spawn ssh root@$hostname expect { //进行匹配 "(yes/no)" {send"yes/r";exp_continue} //输入yes,继续执行 "*password" //参数2 {send"$password\r"} //交给控制台人为输入 }interact[root@ce~]#chmod a+x a.sh[root@ce~]#./a.sh
Demo1:远程登录
[root@localhost opt]# yum install expect -y //安装服务[root@localhost opt]# vim a.sh#!/usr/bin/expect#超时时间set timeout 20log_file test.loglog_user 1#参数传入set hostname [lindex $argv 0]set password [lindex $argv 1]#追踪命令spawn ssh root@$hostname#捕捉信息并且匹配,免交互执行expect { "(yes/no)" {send "yes\r";exp_continue} "*password" {send "$password\r"}}#控制权交给控制台执行interact[root@localhost opt]# chmod +x a.sh[root@localhost opt]# ./a.sh 192.168.56.129 123123spawn ssh root@192.168.56.129The authenticity of host '192.168.56.129 (192.168.56.129)' can't be established.ECDSA key fingerprint is SHA256:DSqXtMX4L3DIIYCai7ACEftdbCIH5n0Y5SPpGCzsjdw.ECDSA key fingerprint is MD5:14:93:39:65:27:31:a6:28:8b:28:d1:2c:fb:32:7b:4d.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.56.129' (ECDSA) to the list of known hosts.root@192.168.56.129's password: Last login: Thu Oct 10 09:46:08 2019 from 192.168.56.1//此时已远程登录对方主机[root@localhost ~]# 登出 //按Ctrl+d退出远程登录Connection to 192.168.56.129 closed.
嵌入执行:
[root@ce~]#more b.sh#!/bin/bash hostname=$1 password=$2 /usr/bin/expect<<-EOF spawn ssh root@${hostname} expect { "(yes/no)" {send "yes\r";exp_continue} "*password" {send"$password\r"} } expect "*]#" send "exit\r" expect eofEOF[root@ce~]#source b.sh
Demo2:登录远程控制后自动退出
[root@localhost opt]# vim b.sh#!/bin/bashhostname=$1password=$2/usr/bin/expect<<-EOFspawn ssh root@${hostname}expect { "(yes/no)" {send "yes\r";exp_continue} "*password" {send "$password\r"}}expect "*]#"send "exit\r"expect eofEOF[root@localhost opt]# chmod +x a.sh[root@localhost opt]# ./a.sh 192.168.56.129 123123spawn ssh root@192.168.56.129The authenticity of host '192.168.56.129 (192.168.56.129)' can't be established.ECDSA key fingerprint is SHA256:DSqXtMX4L3DIIYCai7ACEftdbCIH5n0Y5SPpGCzsjdw.ECDSA key fingerprint is MD5:14:93:39:65:27:31:a6:28:8b:28:d1:2c:fb:32:7b:4d.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.56.129' (ECDSA) to the list of known hosts.root@192.168.56.129's password: Last login: Thu Oct 10 09:46:08 2019 from 192.168.56.1[root@localhost ~]# 登出Connection to 192.168.56.129 closed.//自动退出远程控制
EOF容错只能容制表符TAB,但是空格不行
Demo3:创建用户tom,密码tom123
[root@localhost opt]# vim c.sh#!/bin/bash user=$1password=$2#非交互命令放在expect外面useradd $user#开始进行交互expect << EOF spawn passwd $user expect "新的*" send "${password}\r" expect "重新*" send "${password}\r" expect eof; EOF[root@localhost opt]# chmod +x c.sh[root@localhost opt]# ./c.sh tom tom123spawn passwd tom更改用户 tom 的密码 。新的 密码:无效的密码: 密码少于 7 个字符重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。[root@localhost opt]# su zhou //切换普通用户zhou[zhou@localhost opt]$ su tom //切换新创建的普通用户tom密码: //提示输入密码[tom@localhost opt]$ //此时进入tom用户
SSH远程登录代码健壮版
#!/usr/bin/expect #超时时间 set timeout 20log_file test.log log_user 1#参数传入set hostname [lindex $argv 0]set password [lindex $argv 1]#追踪命令spawn ssh root@$hostname#捕捉信息并且匹配,免交互执行expect { "Connection refused" exit "service not known" exit "(yes/no)" {send "yes\r";exp_continue} "*password" {send "$password\r"}}#控制权交给控制台执行interactexit
控制
命令
参数
密码
用户
登录
输入
时间
信息
控制台
脚本
字符
控制权
进程
普通
位置
变量
字符串
工具
指令
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么知道电脑的网络安全密钥
lol服务器排行
ct6200华为管理服务器
山东金前程网络技术
单招学习计算机网络技术基础
首都百度网络安全日
计算机与国家网络安全中心
北京招聘软件开发工作内容
壁灯设计软件开发
关于网络安全的利和弊短篇
浙江通用软件开发现价
明皮皮计算机软件开发有限公司
东莞智博互联网科技公司
iis图片服务器安全吗
软件开发硬件采集
贾跃亭互联网科技
灰度发布中的数据库问题
鹰潭个人服务器价格
HCNC网络技术实验指南
陕西省高校数据库原理
王博网络技术有限公司
公司网络安全和数据安全计划
四川椰子网络技术有限公司
iis图片服务器安全吗
管家婆物联宝服务器安装不了
等级保护测评之网络安全技术
南通泰达互联网科技有限公司
绝地求生2服务器加载失败
上海gps时间服务器时间同步
世纪互联软件开发