使用expect批量修改用户密码

以前批量管理服务都是通过ssh建立信任关系,也有人用puppet等集中管理软件,只要写好脚本在控制端运行即可,但是现在这两样都没有,让你改10台服务器的密码,可以手动修改,但是成百或上千台呢,这工程量可想而知。

通过expect交互式脚本,可以轻松解决这些问题,下面具体看如何实现

1、检查系统是否安装expect
rpm -qa | grep expect
若没有用yum安装,只需要在控制端这一台机器装就可以了
yum install -y expect

2、创建服务器列表文件,格式如下(前边是IP,中间是当前登陆密码,第三列是要修改的密码)

vi iplist.txt

192.168.10.187 root 123abc!@# zhangwc 123456
192.168.10.188 root 123abc!@# zhangwc 123456

3、创建脚本
创建一个bash脚本,通过for循环读取IP和密码,然后给expect脚本
vi auto_login.sh



#!/bin/bash
for i in `awk '{print $1}' iplist.txt`
do
loginName=`awk /${i}/'{print $2}' iplist.txt`
loginPassword=`awk /${i}/'{print $3}' iplist.txt`
modifyName=`awk /${i}/'{print $4}' iplist.txt`
modifyPassword=`awk /${i}/'{print $5}' iplist.txt`
./expect.sh ${i} ${loginName} ${loginPassword} ${modifyName} ${modifyPassword}
done

创建expect交互式脚本
vi expect.sh

#!/usr/bin/expect -f


set IP [lindex $argv 0]    
set LOGINUSER [lindex $argv 1]    
set PASSWORD [lindex $argv 2]
set MODIFYUSER [lindex $argv 3]    
set NEWPASSWORD [lindex $argv 4]  
spawn ssh $LOGINUSER@$IP " echo '$NEWPASSWORD'| passwd --stdin $MODIFYUSER"


expect {
   "(yes/no)" { send "yes\r"; exp_continue }   ##如果第一次登陆,就发送yes
   "password:" { send "$PASSWORD\r";
exp_continue }    ##发送登陆密码
   
"*?" { send "\r" }  ##没有交互直接发个回车
}
interact


exit


给可执行权限
chmod 755 auto_login.sh expect.sh
运行
./auto_login.sh

通过这个脚本,还可以实现很多功能,只要修改spawn后边的命令就可以了。

备注:expect脚本不能使用sh expect.sh这样的运行方式,所以在写bash的那个脚本的时候要注意。

红色部分说明:

红色部分为新增部分,如果修改的机器中有部分使用了ssh信任,用之前的方法也可以更新,但后边有报错,加入红色部分后,就不会有报错了。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值