当前位置: 首页 > news >正文

expect 安装入门手册

expect 安装入门手册

一、expect 与 tcl 简介

expect 是一款自动化交互套件,也是交互性很强的脚本语言,主要应用于执行命令和程序时,当系统以交互形式要求输入指定字符串时,它能实现交互通信,可帮助运维人员实现对成千上百台服务器的批量管理操作,是一款实用的批量部署工具。

expect 依赖于 tcl,而 Linux 系统通常不自带 tcl,因此需要手动安装 tcl 后再安装 expect。

二、安装前准备

(一)下载软件包

需要下载的软件包为 expect5.45.3.tar.gz 和 tcl8.6.1-src.tar.gz。其中,
tcl 的下载地址为
http://www.tcl.tk/software/tcltk/downloadnow84.tml,
可选择 tcl8.4.20-src.tar.gz;expect 的下载地址为https://sourceforge.net/projects/expect/files/latest/download,
对应版本为 expect5.45.tar.gz。

(二)放置软件包

将下载好的 expect 和 tcl 软件包放到 /usr/local/src 目录下。

三、安装步骤

(一)安装 tcl

  1. 解压 tcl:在 /usr/local/src 目录下,执行命令
[root@*** src]# tar -zvxf tcl8.6.1-src.tar.gz`。
  1. 进入相关目录:解压完成后,执行
    . ```bash
    . [root@*** src]# cd tcl8.6.1/unix
 进入 tcl 解压目录下的 unix 目录。3.  编译安装:执行```bash
[root@*** unix]# ./configure  --prefix=/usr/local/tcl --enable-shared

该命令将 tcl 安装到 /usr/local/tcl 目录并开启共享功能;之后执行`

[root@*** unix]# make && make install`
  1. 复制配置文件:在当前 unix 目录下,执行
`[root@*** unix]# cp tclUnixPort.h ../generic/`
  1. 将 tclUnixPort.h 复制到 generic 目录中,这在安装 expect 时会用到。

(二)安装 expect

  1. 解压 expect:在 /usr/local/src 目录下,执行`
    [root@*** src]# tar -zvxf expect-5.45.3.tar.gz

进入安装目录:执行`

[root@`***` src]# cd expect-5.45.3`

进入 expect 解压目录。

  1. 配置安装路径:执行
`[root@`***`expect-5.45.3]#./configure --prefix=/usr/local/expect --with-tcl=/usr/local/tcl/lib -with tclinclude=/usr/local/src/tcl8.6.1/generic/`

–prefix 指定 expect 的安装路径,
–with-tcl 告诉 configure 脚本 tcl 解释器位置,
–with-tclinclude 告诉脚本 tcl 头文件位置。

  1. 编译安装:执行
`[root@`xxx` expect-5.45.3]# make && make install`完成安装。
  1. 创建软连接:为了便于使用 expect,需要创建软连接,执行以下命令:
   `ls -s /usr/local/tcl/bin/expect  /usr/local/expect/bin/expect``ls -s /usr/local/tcl/bin/expect  /bin/expect``ls -s /usr/local/tcl/bin/expect  /usr/bin/expect`
  • 需要注意的是,expect 的命令实际在 Tcl 包里,所以要把 tcl 中的 expect 命令做软链接到 expect 包里。

四、安装测试

安装完成后,在终端执行[root@*** ~]# expect,若出现expect1.1>的提示,则说明安装成功。

五、expect 常用命令

  • spawn:交互程序开始,后面跟命令或者指定程序。

  • expect:等待一个进程的反馈,获取匹配信息,匹配成功则执行后面的程序动作。

  • send、exp_send:用于发送指定的字符串信息。

  • exp_continue:在 expect 中多次匹配时需要用到。

  • send_user:用来打印输出,相当于 shell 中的 echo。

  • exit:退出 expect 脚本。

  • eof:expect 执行结束并退出。

  • set:定义变量。

  • puts:输出变量。

  • set timeout:设置超时时间。

  • interact:退出自动化,开始允许用户交互。

六、应用场景

expect 凭借其自动化交互的特性,在多个领域都有广泛应用。在服务器管理方面,可用于批量登录多台服务器进行命令执行、配置修改等操作,极大减少运维人员的重复劳动;在软件部署时,能自动完成安装过程中的各种交互确认,实现软件的批量部署;在自动化测试领域,可模拟用户与程序的交互过程,对程序的交互功能进行测试;还能用于数据备份、系统监控等需要频繁人机交互的场景。

七、应用实例

(一)自动登录远程服务器

以下是一个使用 expect 自动登录远程服务器的脚本示例:

#!/usr/bin/expect -f
set timeout 30
spawn ssh [用户名]@[远程主机地址]
expect "password:"
send "[登录密码]\r"
interact

脚本说明:

  • #!/usr/bin/expect -f:指定脚本使用 expect 解释器执行。

  • set timeout 30:设置超时时间为 30 秒。

  • spawn ssh [用户名]@[远程主机地址]:启动 ssh 命令,连接到远程服务器,其中[用户名]为远程服务器的用户名,[远程主机地址]为远程服务器的 IP 地址或域名。

  • expect "password:":等待服务器提示输入密码。

  • send "[登录密码]\r":发送密码,\r表示回车,[登录密码]为登录远程服务器的密码。

  • interact:允许用户与远程服务器进行交互。

使用方法:将上述脚本保存为login_remote.exp,然后执行chmod +x login_remote.exp赋予脚本执行权限,最后运行./login_remote.exp即可自动登录远程服务器。

(二)批量执行命令

如果需要在多台远程服务器上执行相同的命令,可使用如下脚本:

#!/usr/bin/expect -f
set timeout 30
set host_list {[主机1地址] [主机2地址] [主机3地址]}
set username "[用户名]"
set password "[登录密码]"
set command "[需执行的命令]"foreach host $host_list {spawn ssh $username@$hostexpect "password:"send "$password\r"expect "#"send "$command\r"expect "#"send "exit\r"expect eof
}

脚本说明:

  • set host_list {[主机1地址] [主机2地址] [主机3地址]}:定义需要操作的远程服务器列表,[主机1地址][主机2地址][主机3地址]为服务器的 IP 地址或域名。

  • set username "[用户名]":设置登录用户名,[用户名]为远程服务器的登录用户名。

  • set password "[登录密码]":设置登录密码,[登录密码]为远程服务器的登录密码。

  • set command "[需执行的命令]":设置需要在远程服务器上执行的命令。

  • foreach host $host_list { ... }:遍历服务器列表,对每台服务器执行登录、执行命令、退出等操作。

  • expect "#":等待服务器返回命令提示符,不同系统的提示符可能不同,可根据实际情况修改。

  • send "exit\r":执行完命令后退出远程服务器。

  • expect eof:等待命令执行结束。

使用时,将脚本保存为batch_exec.exp,赋予执行权限后运行即可在多台服务器上批量执行指定命令。

(注:文档部分内容可能由 AI 生成)

http://www.dtcms.com/a/272347.html

相关文章:

  • 【保姆级教程】基于anji-plus-captcha实现行为验证码(滑动拼图+点选文字),前后端完整代码奉上!
  • 人工智能-基础篇-28-模型上下文协议--MCP请求示例(JSON格式,客户端代码,服务端代码等示例)
  • 开源入侵防御系统——CrowdSec
  • Linux 服务器综合性能测试脚本(优化版)结构化分析
  • 若依框架去掉Redis
  • CORESET 0 and SIB1 Scheduling in a Nutshell
  • 论文阅读笔记:VI-Net: Boosting Category-level 6D Object Pose Estimation
  • RocketMQ安装(Windows环境)
  • 上线节点固定,项目进度紧张,如何合理压缩工期
  • NGINX系统基于PHP部署应用
  • 实验作业1+整理笔记截图
  • 实训八——路由器与交换机与网线
  • 栈题解——有效的括号【LeetCode】两种方法
  • 硬件基础------电感
  • Matplotlib-绘制训练曲线指南
  • 力扣刷题记录(c++)06
  • HTML应用指南:利用GET请求获取全国永辉超市门店位置信息
  • Unity3D iOS闪退问题解决方案
  • PyTorch仿射变换:原理与实战全解析
  • 深入理解Java虚拟机:Java内存区域与内存溢出异常
  • 【运维架构】云计算运维架构师与基础设施,技术路线,Linux证书(标准化/定制化/CNCF,公有云/混合云/私有云)
  • 【图像处理基石】如何入门图像校正?
  • (6)机器学习小白入门 YOLOv:图片的数据预处理
  • 机器学习 YOLOv5手绘电路图识别 手绘电路图自动转换为仿真软件(如LT Spice)可用的原理图,避免人工重绘
  • Spring MVC 1
  • C++中的list的学习
  • Go语言教程-变量、常量、命名规则
  • 亚矩阵云手机破解Maio广告平台多账号风控:从“生存焦虑”到“规模化增长”的终极方案
  • 电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT
  • 基于开源AI大模型AI智能名片S2B2C商城小程序源码的私域流量新生态构建