使用expect工具实现远程批量修改服务器密码

server/2025/3/13 15:55:40/

使用expect工具实现远程批量修改服务器密码

linux服务器安装Expect工具

1、首先查看系统中是否有安装expect。

# whereis expect

2、Expect工具是依赖tcl的,需要先安装tcl

#wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz
#tar zxvf tcl8.4.19-src.tar.gz
#cd tcl8.4.19/unix
#./configure
#make
#make install

3、安装Expect工具

#wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz
#tar zxvf expect5.45.tar.gz
#cd expect5.45
#./configure --with-tcl=/usr/local/lib --with-tclinclude=…/tcl8.4.19/generic
#make
#make install
#ln -s /usr/local/bin/expect /usr/bin/expect

4、Expect简要介绍

spawn:启动进程,并跟踪后续交互信息
expect: 内部命令expect,判断上次输出结果是否包含指定字符串,如果有则立即返回,否则就等待,超时后返回,只能捕捉由spawn启动的进程的输出expect。
send:向进程发送字符串,模拟输入,该命令不能自动回车换行,换行一般要加\r。
interact:执行完成后保存交互状态,把控制权交给控制台。
set timeout 30:设置超时时间为30秒,默认超时时间为10秒,timeout -1 为永不超时。

远程批量修改服务器脚本

1、准备密码配置文件

配置文件serverspd.txt,每行格式为:IP:账号:原密码:新密码:root原密码:root新密码
例:
# ip:user:password:new_password:root_password:newroot_password
192.168.1.100:testuser:Redhat#2025312:test123test!@#:Redhat#2025312:testRtest!@#
192.168.1.101:testuser:Redhat#2025312:test123test!@#:Redhat#2025312:testRtest!@#

2、批量修改脚本

该脚本适合不能直接使用root登录服务器,需要先使用普通账号远程登录,再切换为root账号修改密码
#!/bin/bash
#定义配置文件,每行格式为:IP:账号:原密码:新密码:root原密码:root新密码
CONFIG_FILE=“servers.txt”
#读取配置文件
while IFS=: read -r IP USER OLD_PASSWORD NEW_PASSWORD ROOTOLD_PASSWORD ROOTNEW_PASSWORD; do
echo “Processing $IP…”
# 使用普通账号登录并切换到root
sshpass -p “$OLD_PASSWORD” ssh -p 9999 -o StrictHostKeyChecking=no “$USER@$IP” << EOF
# 提权到root
expect << EOD
spawn su -
expect “password:”
send “$ROOTOLD_PASSWORD\r”
expect “#”
send “echo ‘$NEW_PASSWORD’ | passwd --stdin $USER\r”
send “echo ‘$ROOTNEW_PASSWORD’ | passwd --stdin root\r”
expect eof
EOD
EOF
# 检查是否修改成功
if [ $? -eq 0 ]; then
echo “Password for $USER@$IP updated successfully.”
else
echo “Failed to update password for $USER@$IP.”
fi
done < “$CONFIG_FILE”


http://www.ppmy.cn/server/174655.html

相关文章

LuaJIT 学习(1)—— LuaJIT介绍

文章目录 介绍Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子&#xff1a; xpcall 的使用 load*() handle U…

利用java实现数据分析

1 问题 在日常生活中&#xff0c;对于数据的处理&#xff0c;为了使数据更加直观&#xff0c;我们可以使用柱状图&#xff0c;饼图&#xff0c;折线图等来呈现&#xff0c;同时也可以对数据直接进行一些处理&#xff0c;那怎样用java来处理这类问题呢&#xff1f; 2 方法 代码清…

emacs使用mongosh的方便工具发布

github项目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登录mongodb数据库 * 用途 在emacs中使用mongosh快速登录mongodb数据库&#xff0c; 操作方法: M-x mongosh, 输入数据库名称&#xff0c;然后就可以自动登录&#xff0c;前提是你已经配置好了…

蓝桥杯省赛真题C++B组2024-握手问题

一、题目 【问题描述】 小蓝组织了一场算法交流会议&#xff0c;总共有 50 人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人&#xff0c;这 7 人彼此之间没有进行握手(但这…

UI自动化测试 —— web端元素获取元素等待实践!

前言 Web UI自动化测试是一种软件测试方法&#xff0c;通过模拟用户行为&#xff0c;自动执行Web界面的各种操作&#xff0c;并验证操作结果是否符合预期&#xff0c;从而提高测试效率和准确性。 目的&#xff1a; 确保Web应用程序的界面在不同环境(如不同浏览器、操作系统)下…

运行一个hadoop程序

在hadoop文件夹下创建wcinput文件夹&#xff0c;在文件夹下创建俩个文本文件 word1.txt&#xff0c;word2.txt文件 分别编辑word1.txt和word2.txt文件内容 hadoop yaen hadoop mapreduce root root 回到hadoop目录下opt/module/hadoop-3.1.3运行命令 hadoop jar share/h…

Linly-Talker:开源数字人框架的技术解析与影响

一、引言&#xff1a;AI 数字人的发展趋势 近年来&#xff0c;数字人&#xff08;Digital Human&#xff09; 技术迅速发展&#xff0c;从最早的 2D 虚拟主播&#xff0c;到如今能够进行实时交互的 3D 智能助手&#xff0c;AI 在多模态交互领域的应用愈发广泛。各大互联网公司…

Vue的scoped原理是什么?

scoped的工作原理 当在 <style> 标签上使用 scoped 属性时&#xff0c;Vue 会为当前组件的每个元素添加一个唯一的 data-v-xxxxxx 属性&#xff0c;并将样式规则中的选择器修改为包含该属性的形式。 编译阶段&#xff1a; 在编译 .vue 文件时&#xff0c;Vue 的编译器…