一、概述
1.1 Expect是什么?
Expect 是一个基于 Tcl(Tool Command Language) 的免费编程工具,专门用于实现 自动化交互式任务。它的核心价值是 替代人工手动输入,自动完成需要与终端交互的程序(如SSH登录、密码修改、FTP传输等)的输入响应过程。
典型应用场景:
-
自动化SSH/FTP远程连接(免去手动输入密码)
-
批量修改系统用户密码
-
网络设备(路由器/交换机)的配置脚本化
-
与需要交互的命令行工具(如
passwd、ftp、mysql等)交互
作者定义:
由Don Libes在1990年开发,最初定义为“实现自动交互功能的软件套件”,目标是让系统管理员可以通过脚本模拟人工输入,完成原本需要手动操作的交互任务(甚至能实现简单的BBS聊天机器人)。
1.2 为什么需要Expect?
常规Shell脚本(如Bash)虽然支持循环、条件判断等控制流,但 无法直接处理需要交互的程序。例如:
-
当执行
passwd tom修改用户密码时,系统会提示输入新密码并验证,这些交互必须通过键盘手动输入。 -
若需批量修改多个用户的密码,或通过SSH自动登录远程主机执行命令,Shell无法直接完成这类交互。
Expect的解决方案:
通过监听程序输出的特定提示(如“密码:”“新的密码:”),自动发送对应的输入(如密码字符串),从而实现 无人值守的自动化交互。
1.3 与SSH免交互的其他方式对比
实现SSH远程操控主机的免交互连接,常见方法包括:
-
SSH密钥对(推荐):通过生成公钥/私钥对,将公钥部署到目标主机,实现无密码登录(最安全且无需额外工具)。
-
sshpass工具:直接在命令行或脚本中明文传递密码(安全性低,密码可能被
ps命令捕获)。 -
Expect工具:通过脚本监听SSH的交互提示(如“password:”),自动发送密码(平衡灵活性与安全性,适合复杂交互场景)。
二、环境准备:安装Expect
2.1 检查是否已安装
在Linux系统中,可通过以下命令检查Expect是否已安装:
rpm -q expect # CentOS/RHEL
# 或
dpkg -l | grep expect # Ubuntu/Debian
若未安装,会提示“package expect is not installed”。
2.2 安装方法
根据系统类型选择对应命令:
| 系统类型 |
安装命令 |
备注 |
|---|---|---|
| CentOS/RHEL |
|
需root权限 |
| Ubuntu/Debian |
|
需联网 |
| macOS |
|
需提前安装Homebrew |
| 源码编译 |
需先安装Tcl 8.6+,再下载Expect源码编译 |
适用于特殊环境 |


1578

被折叠的 条评论
为什么被折叠?



