news 2026/5/27 18:58:26

告别重复输入密码!用Linux expect脚本批量管理服务器,5分钟搞定自动化登录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别重复输入密码!用Linux expect脚本批量管理服务器,5分钟搞定自动化登录

告别重复输入密码!用Linux expect脚本批量管理服务器,5分钟搞定自动化登录

每天登录十几台服务器重复输入密码,是运维工程师的噩梦。我曾在一个紧急故障处理中,因为连续输错三次密码导致账号被锁,耽误了半小时黄金修复时间。这种低效操作不仅消耗精力,更可能引发严重事故。而expect脚本正是解决这一痛点的利器——它能模拟人类交互行为,自动完成密码输入、命令执行等重复操作。

与传统SSH密钥对方案相比,expect的优势在于:

  • 兼容性强:适用于必须使用密码认证的环境
  • 灵活度高:可处理复杂交互流程(如二次认证)
  • 即装即用:无需提前部署密钥到所有节点

1. 环境准备与快速上手

1.1 极简安装方案

主流Linux发行版只需一条命令即可完成安装:

# CentOS/RHEL sudo yum install -y expect # Ubuntu/Debian sudo apt-get install expect -y

验证安装是否成功:

expect -c 'puts "Hello Expect"'

正常情况会输出Hello Expect,若报错请检查PATH环境变量是否包含/usr/bin/expect

1.2 第一个自动化脚本

创建auto_login.exp文件,内容如下:

#!/usr/bin/expect set timeout 10 spawn ssh admin@192.168.1.100 expect "password:" send "P@ssw0rd!\r" interact

给脚本添加执行权限并运行:

chmod +x auto_login.exp ./auto_login.exp

注意:首次连接时可能出现Are you sure you want to continue connecting (yes/no)?提示,需在expect脚本中添加对应处理(下文会详解)

2. 生产级脚本开发技巧

2.1 多服务器批量管理

通过参数化实现通用脚本:

#!/usr/bin/expect set ip [lindex $argv 0] set user [lindex $argv 1] set password [lindex $argv 2] spawn ssh $user@$ip expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$password\r" } } expect "#" { send "df -h\r" } expect eof

调用方式:

./batch_ops.exp 192.168.1.100 root MyPass123

2.2 超时与异常处理

关键参数设置:

set timeout 30 # 全局超时30秒 expect { -timeout 5 "password:" { send "$pwd\r" } # 局部5秒超时 timeout { puts "连接超时"; exit 1 } eof { puts "连接异常终止" } }

推荐超时策略:

操作类型建议超时重试次数
本地命令执行10秒2次
内网SSH连接20秒3次
跨机房操作60秒1次

2.3 日志记录与调试

在脚本开头添加:

log_file -a /var/log/expect_script.log log_user 1 # 同时输出到屏幕

调试模式启动:

expect -d your_script.exp

典型调试输出分析:

expect: does "ssh: connect to host 192.168.1.100 port 22: Connection refused\r\n" (spawn_id exp6) match glob pattern "password:"? no

3. 实战案例:自动化巡检系统

3.1 架构设计

├── hosts.list # 服务器清单 ├── commands.list # 待执行命令 ├── collector.sh # 主控脚本 └── templates/ # 报告模板

hosts.list格式:

192.168.1.100,admin,SecurePwd123 192.168.1.101,root,My@Pass456

3.2 核心实现代码

collector.sh片段:

while IFS=',' read -r ip user pass; do expect <<EOF spawn ssh $user@$ip expect { "yes/no" { send "yes\r"; exp_continue } "password:" { send "$pass\r" } } expect "#" { send "hostname && date && uptime\r" expect -re ".+" { set output $expect_out(buffer) } } send "exit\r" expect eof EOF done < hosts.list

3.3 性能优化方案

  1. 并行执行
parallel -j 10 ./collector.sh ::: $(seq 1 100)
  1. 连接复用
spawn ssh -o ControlMaster=yes -o ControlPath=~/.ssh/conn-%r@%h:%p $user@$ip
  1. 结果缓存
redis-cli set "$ip-status" "$output" EX 3600

4. 安全增强方案

4.1 密码安全管理

推荐方案对比:

方案优点缺点
脚本加密无需额外配置存在被破解风险
环境变量动态获取需维护变量文件
Vault集成最高安全性架构复杂

示例使用HashiCorp Vault:

set password [exec vault kv get -field=password secret/ssh_creds/$ip]

4.2 操作审计实现

在expect脚本中添加:

send "logger -t EXPECT_SCRIPT \"User $user executed script on $ip\"\r"

审计日志格式:

Jun 15 14:30:01 server1 EXPECT_SCRIPT: User root executed script on 192.168.1.100

4.3 防火墙策略建议

最小化放行规则:

iptables -A INPUT -p tcp --dport 22 -s 10.0.0.0/24 -j ACCEPT iptables -A OUTPUT -p tcp --sport 22 -d 10.0.0.0/24 -j ACCEPT

在项目实践中,我们团队通过expect脚本将服务器部署时间从平均45分钟缩短到7分钟。最关键的技巧是在expect块中使用正则表达式匹配动态提示符,例如expect -re {\$ $|# $}可以同时匹配普通用户和root提示符。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/27 18:58:22

揭秘AI Agent:企业部署后哪些核心环节能实现降本增效快速见效?

在当前数字化转型进入深水区的2026年&#xff0c;企业对AI技术的诉求已从“技术尝鲜”转向“实效落地”。随着大模型技术与企业私有知识库的深度融合&#xff0c;企业级AI智能体已成为重构生产力的核心引擎。根据《2026年中国企业AI智能体应用趋势白皮书》显示&#xff0c;超过…

作者头像 李华
网站建设 2026/5/27 18:58:20

Pixelle-Video:三步完成专业短视频,AI全自动创作终极指南

Pixelle-Video&#xff1a;三步完成专业短视频&#xff0c;AI全自动创作终极指南 【免费下载链接】Pixelle-Video &#x1f680; AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 还在为…

作者头像 李华
网站建设 2026/5/27 18:57:25

收藏!Agent学习路线全解析:小白也能轻松入门大模型的世界

本文指出常见的Agent学习路线顺序错误&#xff0c;导致学习者难以应对真实场景。正确的学习顺序应先理解Agent底层机制&#xff0c;包括Function Calling、ReAct循环和Token/Context Window限制。接着学习LangGraph框架&#xff0c;掌握StateGraph、条件边和Checkpointer等关键…

作者头像 李华
网站建设 2026/5/27 18:56:56

探索OpCore Simplify:自动化OpenCore EFI配置的艺术

探索OpCore Simplify&#xff1a;自动化OpenCore EFI配置的艺术 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾为Hackintosh配置过程中的复杂…

作者头像 李华
网站建设 2026/5/27 18:54:13

字库芯片驱动与SPI通信实战:在STM32上实现GB18030编码汉字显示

1. 字库芯片与GB18030编码基础 第一次接触字库芯片的开发者可能会觉得它很神秘&#xff0c;其实它的工作原理就像一本字典。想象一下&#xff0c;当我们需要查某个汉字的意思时&#xff0c;只需要知道它的页码就能快速找到对应内容。字库芯片做的事情几乎一模一样&#xff0c;只…

作者头像 李华