公司有五十多台服务器。每台服务器中使用的密码完全不同,同时操作系统也不一样,centos5,6,7 、ubuntu,windows都有,更不用提其中各种小版本。

root密码定期更改是一个大问题(windows暂时不提)。

对于批量更改,首先想到的ansible,但是使用ansible有一个问题就是需要一台管理机,管理机需要通过将自己的ssh_key传给被受体服务器才可以正常使用

对于添加ssh_key,固然很麻烦。所以后面找到了expect这个命令

expect命令默认服务器中没有,可以在阿里的base源中找到,直接使用yum install -y expect进行安装

直接看脚本

服务器列表信息
[root@bogon ~]# cat modifyrootpasswd.txt
##ip user port oldpw newpw
##------------------------------------------------------------------------------------------------------
192.168.3.145 root 22 chunlanyy PU4XdnIy3eWz7TM17OKniHoeBUnRMO1q
192.168.3.146 root 22 chunlanyy 70Zzm993Qnf13MGpBHaBgcvUX7pztwib
[root@bogon ~]#

在excel表中,按上述格式,把旧密码写入,然后再批量直接将要修改的新密码复制进入

密码批量生成使用tr命令

[root@bogon ~]# tr -cd '[:alnum:]' < /dev/urandom | fold -w 32 | head -2
QSnDl7EuEXLUbgNf9jBuVm8P0x6zb3OT
wvk4ihCl7G2f0ISySu2COifr1tHtAp6C

其中head可以显示多少行,然后直接copy至excel中,自动对齐

后将整个excel表的信息copy至sublime中,形成文本rz至服务器中即可

要注意的是,在服务器信息列表中,一定要cat一下文本的内容,注意linux和windows中不同分隔符的区别。

[root@bogon ~]# cat modifyrootpasswd.txt
##ip user port oldpw newpw
192.168.3.145 root 22 chunlanyy PU4XdnIy3eWz7TM17OKniHoeBUnRMO1q
192.168.3.146 root 22 chunlanyy 70Zzm993Qnf13MGpBHaBgcvUX7pztwib[root@bogon ~]#

如果出现的像是这种,会导致密码修改失败。

expect脚本
[root@bogon ~]# cat passwordmodify.sh
#!/bin/bash
File=/root/modifyrootpasswd.txt for Ip in `awk '/^[^#]/{print $1}' $File`;do
User=`awk -v Var=$Ip '{if(Var==$1)print $2}' $File`
Port=`awk -v Var=$Ip '{if(Var==$1)print $3}' $File`
Oldpw=`awk -v Var=$Ip '{if(Var==$1)print $4}' $File`
Newpw=`awk -v Var=$Ip '{if(Var==$1)print $5}' $File`
expect -c "
spawn ssh -p $Port $User@$Ip
set timeout 30
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$Oldpw\r\";exp_continue}
\"$User@*\" {send \"echo \'$Newpw\' |passwd --stdin $User\r exit\r\";exp_continue}
}"
done

要注意的是

1.expect中的\r是出现交互的标示符

2.spawn是expect中的执行命令

小结:

相比于ansible,expect具有方便简洁的作用,不受制于ssh_key。

但是缺点也很明显,执行结果显示并不直接,因为有一大堆交互内容显示(完全模拟手动登陆),无法知晓更改结果,同时在服务器密码的生成也不够自动化。

批量修改root密码的更多相关文章

  1. ansible非root用户批量修改root密码

    前言: 由于线上服务器密码长久没有更新,现领导要求批量更换密码.线上的之前部署过salt,但由于各种因素没有正常使用. 使用自动化工具批量修改的计划搁浅了,后来领导给了个python多线程修改密码脚本 ...

  2. Ansible批量修改root密码

    0x01:首先做好免密登录 http://www.cnblogs.com/evlon/p/8094306.html 0x02:批量修改密码 ansible all -m raw -a "ec ...

  3. linux系统批量修改root密码

    #!/bin/bash ip_list=(192.168.36.12 192.168.36.13) remote_cmd="echo new-passwd | passwd --stdin ...

  4. linux批量修改root密码脚本

    转至:https://blog.csdn.net/onionm/article/details/100514892?utm_medium=distribute.pc_relevant_download ...

  5. ansible 批量修改root密码

    [root@sz_fy_virt_encrypt_33_239 fetch]# cat /opt/passwd.yml - hosts: web vars: path: /home/opsadmin ...

  6. Python 批量修改root密码

    #_*_coding:utf8_*_ from multiprocessing import Process, Pool import paramiko import sys,os host_list ...

  7. Ansible playbook 批量修改服务器密码 先普通后root用户

    fsckzy   Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...

  8. (转)linux passwd批量修改用户密码

    linux passwd批量修改用户密码  原文:http://blog.csdn.net/xuwuhao/article/details/46618913 对系统定期修改密码是一个很重要的安全常识, ...

  9. linux passwd批量修改用户密码

    linux passwd批量修改用户密码 对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用 passwd user 这样的命令来修改密码,但是这样会进入交互模式,即使使用脚本也不 ...

随机推荐

  1. 线程监控ProcessMonitor

    软件行为 在线监测  注册表  行为判断

  2. [css知识体系]flexbox模型

    背景 flexbox 模型的产生主要是为给布局.对齐和容器内的空间分配提供一个更有效的方法,即使尺寸未知或是动态改变的(flex,收缩,弹性 就是为此命名). flex布局使得容器能够改变子元素的宽高 ...

  3. Mybatis基于XML配置SQL映射器(三)

    Mybatis之动态SQL mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: if choo ...

  4. VC2010 CString.Format使用报错 error C2664

    error C2664: “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 ...

  5. C#调PowerShell在SCVMM中创建虚拟机时,实时显示创建进度

    关于c#调用PowerShell来控制SCVMM,网上有很多例子,也比较简单,但创建虚拟机的过程,是一个很漫长的时间,所以一般来说,创建的时候都希望可以实时的显示当前虚拟机的创建进度.当时这个问题困扰 ...

  6. HTML5: HTML5 表单属性

    ylbtech-HTML5: HTML5 表单属性 1.返回顶部 1. HTML5 表单属性 HTML5 新的表单属性 HTML5 的 <form> 和 <input>标签添加 ...

  7. 25. SPI

  8. HDU1251-统计难题-map+输入

    Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部分 ...

  9. python学习笔记:模块——os模块(操作文件/目录)

    import os os.rename(old,new) #重命名文件或目录 os.remove(f)#删除文件 os.mkdir('china/beijing') #创建文件夹 os.makedir ...

  10. ajaxfileupload上传文件出现SyntaxError:unexpected token <错误

    function ajaxFileUpload() { $.ajaxFileUpload ( { url: uri, secureuri: false, fileElementId: 'upFile' ...