智慧屏 安装 app如何提升家庭娱乐与教育体验的关键工具
790
2022-11-10
使用expect脚本,批量修改root密码
以前批量管理服务都是通过ssh建立信任关系,也有人用puppet等集中管理软件,只要写好脚本在控制端运行即可,但是现在这两样都没有,让你改10台服务器的密码,可以手动修改,但是成百或上千台呢,这工程量可想而知。
通过expect交互式脚本,可以轻松解决这些问题,下面具体看如何实现
1、检查系统是否安装expect
rpm -qa | grep expect
若没有用yum安装,只需要在控制端这一台机器装就可以了
yum install -y expect
2、创建服务器列表文件,格式如下(前边是IP,中间是当前登陆密码,第三列是要修改的密码)
vi iplist.txt
192.168.1.100 123456 123abc
192.168.1.101 654321 abc123
······
3、创建脚本
创建一个bash脚本,通过for循环读取IP和密码,然后给expect脚本
vi auto_login.sh #!/bin/bashfor i in `awk '{print $1}' iplist.txt`doy=`awk /${i}/'{print $2}' iplist.txt`z=`awk /${i}/'{print $3}' iplist.txt`./expect.sh ${i} ${y} ${z}done
创建expect交互式脚本
vi expect.sh #!/usr/bin/expect -f set IP [lindex $argv 0] ##设置IP为第一个带入项,也就是上边脚本的$iset PASSWORD [lindex $argv 1] ##同理,第二个带入项,$yset NEWPASSWORD [lindex $argv 2] ##同理,第三个带入项,$z spawn ssh $IP " echo '$NEWPASSWORD'| passwd --stdin root " ##spawn后边跟要执行的命令,此例是把root密码改成iplist.txt中的第三列的数值 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的那个脚本的时候要注意。
2011-11-02修正:
红色部分为新增部分,如果修改的机器中有部分使用了ssh信任,用之前的方法也可以更新,但后边有报错,加入红色部分后,就不会有报错了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~