expect是Unix系统中用来进行自动化控制和测试的软件工具,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。


用法

Linux中我们经常写脚本处理一些繁琐的任务,但不幸的是很多交互式的命令我们不得不人肉响应。

expect可以代替我们实现与系统的交互。

我们可以通过expect实现远程自动更改用户密码,而不需要手动输入旧密码和新密码:

#!/bin/bash
usr_passwd='old_passwd'
new_passwd='new_passwd'
while read ip
do
/usr/bin/expect <<-EOF
set timeout -
spawn ssh -t mina.xiang@$ip
expect {
"*yes/no*" { send "yes\r";exp_continue }
"*assword:" { send "$usr_passwd\r" }
}
expect "*~]$*" { send "hostname\r" }
expect "*~]$*" { send "passwd\r" }
expect "(current)*password:" { send "$usr_passwd\r" }
expect "New password:" { send "$new_passwd\r" }
expect "Retype*password:" { send "$new_passwd\r" }
expect "*~]$*" { send "exit\r" }
expect eof
EOF
done < /home/mina.xiang/serverip.txt

change-passwd

最近做得稍微复杂一点的,普通用户卸载软驱floppy模块,普通用户权限不够时需要通过sudo执行。

#!/bin/bash
usr_passwd='passwd'
while read ip
do
/usr/bin/expect <<-EOF
set timeout -
spawn ssh -t mina.xiang@$ip
expect {
"*yes/no*" { send "yes\r";exp_continue }
"*assword:" { send "$usr_passwd\r" }
}
expect "*~]$*" { send "hostname\r" }
expect "*~]$*" { send "tty\r" }
expect "*~]$*" { send "pwd\r" }
expect "*~]$*" { send "sudo modprobe -r floppy\r" }
expect "\[sudo\]*mina.xiang:" { send "$usr_passwd\r" }
expect "*~]$*" { send "sudo bash -c \"echo 'blacklist floppy' >> /etc/modprobe.d/blacklist-floppy.conf\"\r" }
expect "*~]$*" { send "sudo bash -c \"echo 'install floppy /bin/false' >> /etc/modprobe.d/blacklist-floppy.conf\"\r" }
expect "*~]$*" { send "sudo cp /boot/initramfs-3.10.0-693.17.1.el7.x86_64.img /boot/initramfs-3.10.0-693.17.1.el7.x86_64.img.$(date +%m-%d-%H%M%S).bak\r" }
expect "*~]$*" { send "sudo dracut --omit-drivers floppy -f\r" }
expect "*~]$*" { send "sudo sed -i '/^GRUB_CMDLINE_LINUX=/s/\"$/ floppy.blacklist=1 rd.driver.blacklist=floppy\"/' /etc/sysconfig/grub\r" }
expect "*~]$*" { send "sudo grub2-mkconfig -o /boot/grub2/grub.cfg\r" }
expect "*~]$*" { send "sudo cp /boot/initramfs-3.10.0-693.17.1.el7.x86_64kdump.img /boot/initramfs-3.10.0-693.17.1.el7.x86_64kdump.img.$(date +%m-%d-%H%M%S).bak\r" }
expect "*~]$*" { send "sudo sed -i '/^KDUMP_COMMANDLINE_APPEND=/s/\"$/ rd.driver.blacklist=floppy\"/' /etc/sysconfig/kdump\r" }
expect "*~]$*" { send "sudo kdumpctl restart\r" }
expect "*~]$*" { send "sudo mkdumprd -f /boot/initramfs-3.10.0-693.17.1.el7.x86_64kdump.img\r" }
expect "*~]$*" { send "exit\r" }
expect eof
EOF
done < /home/mina.xiang/serverip.txt

remove-floppy

--永久卸载floppy流程

--脚本中调用得serverip.txt文件内存放目标机器ip地址,每行一个ip


常用指令

进入expect环境后主要使用的内部命令有三个

  • spawn

 创建一个新进程,并运行给定的程序,它的主要功能是给运行进程加个壳,用来传递交互指令,expect可以通过spawn监听进程的输出。

  • expect

 此expect非彼expect,它是expect的内部命令,在expect环境中使用,它用来匹配spawn中进程输出,匹配上了就执行后面的body部分。

  • send

 用于执行交互动作,改密码时可以send密码,与手工输入密码的动作等效。


expect内部命令会等待目标进程的输出,等待时间默认10秒,没有得到期望值且等待超时后执行下一条命令,也可通过"set timeout number"手动设置时长,“set timeout -1”为永不超时。

expect eof是在等待结束标志。由spawn启动的命令在结束时会产生一个eof标记,expect eof即在等待这个标记.

Linux自动化命令工具expect的更多相关文章

  1. linux自动交互工具expect,tcl安装和安装包,以及自动互信脚本

    linux自动交互工具expect,tcl安装,以及自动互信脚本 工作中需要对几十台服务器做自动互信,无意中发现expect命令,研究一番. 在网上找了许多资料也没有安装成功,摸索着总算成功了.现分享 ...

  2. linux自动化交互脚本expect详解set timeout 5是 意思是在expect语句中,5s后超时,不再作出选择。

    linux自动化交互脚本expect详解  更新时间:2020年10月21日 10:13:20   作者:lendsomething     这篇文章主要介绍了linux自动化交互脚本expect的相 ...

  3. Linux批量部署工具Expect

    既然没有遇到过,做好准备总是好的.这是自己送给自己的话,现在运维做自动话越来越多,自己就学以下,记录笔记.目前主流的有puppet.Expect.pssh等等,今天就用Expect做自动部署和日常管理 ...

  4. Linux sar命令工具详细介绍

    sar命令工具详细介绍 by:授客 QQ:1033553122 由于篇幅限制,采用网盘分享, 下载地址: sar命令工具详细介绍.pdf

  5. Linux实用命令工具-dtrx根据需要自动解压

    刚刚逛网站的时候看到一个命令工具很不错——dtrx. 这个工具能够解压的类型包括tar, zip,rpm, deb, gem, 7z, cpio, rar 等等,并且这个工具能自动识别压缩包类型并进行 ...

  6. linux自动化构建工具-scons指南

    1.scons是linux下的自动构建工具 scons是用Python编写的,使用scons之前需确认是否已经安装了Python.(在系统的命令行中运行python -V或python --versi ...

  7. linux常用命令的介绍

    本文主要介绍Linux常用命令工具,比如用户创建,删除,文件管理,常见的网络命令等 如何创建账号: 1. 创建用户 useradd -m username -m 表示会在/home 路径下添加创建用户 ...

  8. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  9. 使用expect实现自动交互,shell命令行自动输入,脚本自动化,变量引用,expect spawn执行带引号命令,expect 变量为空,不生效,不能匹配通配符*,函数,数组

    背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...

随机推荐

  1. 【原创】大叔问题定位分享(27)spark中rdd.cache

    spark 2.1.1 spark应用中有一些task非常慢,持续10个小时,有一个task日志如下: 2019-01-24 21:38:56,024 [dispatcher-event-loop-2 ...

  2. 九.LNMP网站架构实践部署

    期中集群架构-第九章-期中架构LNMP章节====================================================================== 01. LNMP ...

  3. jsp 部署

    部署一个Servlet 3.0应用程序是一件轻而易举的 事.通过Servlet注解类型,对于不太复杂的应用程序, 可以部署没有描述符的Servlet/JSP应用程序.尽管如 此,在需要更加精细配置的情 ...

  4. CSS选择器权重计算

    CSS各种选择器的权重: 1.ID选择器  +100 2.类.属性.伪类选择器   +10 3.元素.伪元素选择器   +1 4.其他选择器   +0 如果有两个CSS样式都作用于某元素,如: #id ...

  5. vue项目移植tinymce踩坑

    转载:https://segmentfault.com/a/1190000012791569?utm_source=tag-newest 2019-2-18 貌似这篇文章帮了大家一些小忙最近tinym ...

  6. SSL通信-忽略证书认证错误

    .NET的SSL通信过程中,使用的证书可能存在各种问题,某种情况下可以忽略证书的错误继续访问.可以用下面的方式跳过服务器证书验证,完成正常通信. 1.设置回调属性ServicePointManager ...

  7. SSM框架中常用的配置文件

    学习框架,刚开始的时候最烦的就是一些配置文件,有很多需要配置的东西,今天把这些配置文件信息稍微整理一下,以后说不定会用的到. web.xml文件 <?xml version="1.0& ...

  8. IDEA上创建 Maven SpringBoot + zookeeper +dubbo 实例

    概述 首先声明,本文是学习总结类型的博客内容,如有雷同纯属学习.本位主要结合zookeeper和dubbo做个简单实例.目前来说,一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越 ...

  9. manjaro安装及设置

    因我的笔记本(联想的拯救者)昨晚打开后什么都还没做就被更新系统“抢走”了画面导致按什么都不管用 所以就想起能不能不用win系统,都知道linux比win稳定,so....就找到了manjaro.以下是 ...

  10. Python 中文(大写)数字转阿拉伯数字(转)

    # constants for chinese_to_arabic CN_NUM = { '〇' : 0, '一' : 1, '二' : 2, '三' : 3, '四' : 4, '五' : 5, ' ...