带你见证expect的强大——全程自动化执行命令

痛点:

现在有两台Linux主机A和B,如何从A主机ssh到B主机,然后在B主机上执行命令,如何使这个过程实现全程自动化?你可能会使用这种方法:

ssh [email protected] "ls"

但是这种方式比较笨拙,每次都要输入密码,同时并不能执行一些复杂的逻辑或命令。那么如何实现全程自动化呢?这就要用到今天这篇文章总结的expect了。

expect是什么?

expect是一个免费的编程工具,用来实现自动的交互式任务,而无需人为干预。说白了,expect就是一套用来实现自动交互功能的软件。

在实际工作中,我们运行命令、脚本或程序时,这些命令、脚本或程序都需要从终端输入某些继续运行的指令,而这些输入都需要人为的手工进行。而利用expect,则可以根据程序的提示,模拟标准输入提供给程序,从而实现自动化交互执行。这就是expect!!!

expect基础

1.send 命令接收一个字符串参数,并将该参数发送到进程。
2.expect命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。
3.spawn命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。
4.interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

案例分析

就以上一篇文章批量添加主机为例,我们通过zabbix—api接口批量添加了主机,但是还是没有完成,需要在被监控主机上添加agent,如果一个个添加工作量很大,所以在这里用上正好合适。

#!/bin/bash
user=linfan #主机用户名
pass=‘linfan123‘ #主机密码
for ip in `cat iplist.txt` #文件中放着需要执行命令的主机IP
do
  /usr/bin/expect << EOF
  set timeout 3  #链接超时3秒
  spawn scp /home/linfan/zabbix_xiufu.sh [email protected]$ip:/home/linfan/#将要执行的脚本传到需要执行命令的主机
    expect {
        "(yes/no)" {send "yes\r"; exp_continue}#出现“yes/no”的字样,就自动输入“yes”其中exp_continue表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。
        "password:" {send "$pass\r"}#出现“password:”字样,就自动输入密码
  }
  spawn ssh [email protected]$ip #远程切换到执行命令的主机中
  expect {
        "password:" {send "$pass\r"}#出现“password:”字样,就自动输入密码
  }
  expect "[email protected]*"  {send "sudo chmod 755 /home/linfan/zabbix_xiufu.sh\r";}#出现“用户名@任何的”字样 就给与脚本执行权限
  expect "[email protected]*"  {send "sudo /home/linfan/zabbix_xiufu.sh\r";}#出现“用户名@任何的”字样 就执行脚本
  expect "[email protected]*"  {send "exit\r"}##出现“用户名@任何的”字样 就退出
EOF
done

原文地址:https://blog.51cto.com/13858192/2424314

时间: 2024-08-02 00:39:48

带你见证expect的强大——全程自动化执行命令的相关文章

linux &nbsp; expect远程自动登录以及执行命令

#!/bin/bash passwd='Abcd1234' /usr/bin/expect <<-EOF set time 30                执行超时时间  任何输入30S后退出 spawn ssh -p22 [email protected] expect { "*yes/no" { send "yes\r"; exp_continue } "*password:" { send "$passwd\r&q

使用expect实现自动交互,shell命令行自动输入

背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作中需要从终端手动输入某些内容来使得程序或命令继续运行的目的.如安装软件是时的一些提示,ssh远程主机执行命令时需要多次输入密码的情况. 安装expect 安装依赖:yum install tcl -y 安装expect:Centos系统yum install expect -y或Ubuntu系统ap

【原创】案例分享(3)用户行为分析--见证scala的强大

场景分析 用户行为分析应用的场景很多,像线上网站访问统计,线下客流分析(比如图像人脸识别.wifi探针等),比较核心的指标有几个: PV | UV | SD | SC 指标说明: PV(Page View):网站浏览量或者商场门店的访问量UV(Unique Visitor):独立访客数,即去重后的人数SD(Session Duration):单次会话停留时间SC(Session Count):会话次数 用户行为分析的原始数据通常是一系列时间离散数据,比如网站访问记录:用户在一个时间点访问了一个网

expect脚本远程登录、远程执行命令和脚本传参简单用法

expect介绍: 最近想写一个自动化安装脚本,涉及到远程登录.分发文件包.远程执行命令等,其中少不了来回输入登录密码,交互式输入命令等,这样就大大降低了效率,那么有什么方法能解决呢?不妨试试expect: expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp scp telnet. expect就可以根据设定的规则,自动帮我们输入密码,大大节省了时间. 远程登录lin

Ant管理安卓项目的自动化打包命令

Ant管理安卓项目的自动化打包命令 一.配置ant 1.登陆ant下载网页:http://ant.apache.org/bindownload.cgi,点击红框内容进行ant下载. 2.把ant下载包解压放进指定目录下. 3.配置ant的系统环境,如下 4.在dos环境中输入ant -version 测试ant环境配置是否成功. 二.使用ant命令给安卓项目生成build.xml和local.properties配置文件 1.在dos环境下输入命令: android update project

分发系统介绍、 expect脚本远程登录、expect脚本远程执行命令、expect脚本传递参数

分发系统介绍 大多数企业都会有这样的需求,业务稍微大一点,它都会去做一些负载均衡,也意味着你的机器有多台,至少得两台,两台的话,你的程序是分别放在了两台机器上或者是多台机器上:假如说要添加一个新的功能,或者说你的程序有一个小bug,那这个时候你如果想这个bug修复,或者说新增一个功能的话,你要去改程序,那很多企业有svn,它是一个代码管理仓库,那我们如果把程序修改了之后呢,先传一份到svn库里边去:如果再智能自动化一点,我可以从咱们服务器上或者测试机上把svn库里的代码直接拽过来,发布到咱们的测

rsync配置与自动化执行

rsync是类unix系统下的数据镜像备份工具--remote sync.一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步.我们先来了解下rsync的语法吧,然后在配置rsync+ssh+crontab,实现自动化备份. yum install rsync -y                     #安装服务 本地目录同步(个人认为本地同步还是cp实用) rsync -avz /tang /home            #将/tan

强大实用的DISM命令

今天 师弟大秀他的搞机技能, 还是很厉害的 线程   核数 模块式结构  等等 他远程 将服务器系统从标准版升级到企业版用到了dism命令,稍微了解了一下 原文地址   http://bbs.ithome.com/thread-542956-1-1.html 强大实用的DISM命令使用方法详解+4 分类:电脑应用技巧 标签:命令.技巧.系统.问题 184 views(浏览)DISM(Deployment Imaging and Management),即部署映像服务和管理, 用于安装.卸载.配置

Andorid自动化-Monkey命令一

1.查看是否存在有连接设备 adb devices 2.安装apk到设备 连接成功的设备通过adb命令安装apk,执行命令时,切换目录到apk所在文件夹,如apk在E:\下,则首先执行cd /d E:\TaoBao.apk adb intall [apk名称,例如:TaoBao.apk] 当现实success时说明安装成功 3.执行设备中某一个应用的随机事件 adb shell monkey -p [包名,例如:联系人com.android.contacts] -v[可为多个-v,-v:指定打印