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. 【原创】大叔经验分享(1)在yarn上查看hive完整执行sql

    hive执行sql提交到yarn上的任务名字是被处理过的,通常只能显示sql的前边一段和最后几个字符,这样就会带来一些问题: 1)相近时间提交了几个相近的sql,相互之间无法区分: 2)一个任务有问题 ...

  2. numpy数据去重

    import numpy as npx = np.array([1,2,3,2,4,2,5,7,7])print(np.unique(x)) 简单散点图的绘制,没有显示出文字是因为需要下载个插件

  3. apache负载调优

    Apache负载调优 watch -n 1 -d "pgrep httpd|wc -l"  #apache动态查看连接数     ps aux | grep httpd | wc ...

  4. HttpClient当HTTP连接的时候出现大量CLOSE_WAIT连接(转)

    ESTABLISHED 表示正在进行网络连接的数量 TIME_WAIT 表示表示等待系统主动关闭网络连接的数量 CLOSE_WAIT 表示被动等待程序关闭的网络连接数量 上篇文章给出了解决TIME_W ...

  5. python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作

    1.参考 利用 Python + Selenium 自动化快速截图 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素) 使用python获取系统所有进程PID以及进程名 ...

  6. LNMP一键安装包添加虚拟主机、删除虚拟主机及如何使用伪静态

    本文主要介绍LNMP一键安装包添加虚拟主机.删除虚拟主机及如何使用伪静态. 一.添加虚拟主机通俗点就是在VPS/服务商上添加一个网站(域名). 需要执行如下命令:/root/vhost.sh 执行后会 ...

  7. ACA:利用ACA解决TSP优化最佳路径问题——Jason niu

    load citys_data.mat n = size(citys,1); D = zeros(n,n); for i = 1:n for j = 1:n if i ~= j D(i,j) = sq ...

  8. (53)Wangdao.com第七天_JavaScript 强制类型转换

    其他进制的数字 二进制    以 0b 开头的 Number 八进制    以 0 开头的 Number 十六进制    以 0x 开头的 Number 注意:无论是多少进制的数字,输出都是十进制 强 ...

  9. python获取文件所在目录

    1.执行的python程序获取自己文件所在目录 import os,sys os.chdir(sys.path[0]); dir_name = os.path.abspath(os.path.join ...

  10. Error creating bean with name 'dataSource' defined in class path resource 报错解决办法

    在学习spring boot 的数据库操作的时候,报了一串错误