公司有五十多台服务器。每台服务器中使用的密码完全不同,同时操作系统也不一样,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. 不修改源代码,动态注入Java代码的方法(转)

    转自:https://blog.csdn.net/hiphoon_sun/article/details/38707927 有时,我们需要在不修改源代码的前提下往一个第三方的JAVA程序里注入自己的代 ...

  2. tomcat如何正确的开启远程调试功能(转)

    转自:http://blog.csdn.net/mhmyqn/article/details/49209541 版权声明:本文为博主原创文章,未经博主允许不得转载. 在日常开发中,有时需要对远程服务器 ...

  3. (原)centos 防火墙开放端口命令

    centos 防火墙默认是关闭非系统端口的,所以用到非系统端口首先开放,命令如下 firewall-cmd --zone=public --add-port=1935/tcp --permanent ...

  4. permutations and combinations

    # import itertools # # my_list = [1, 2, 3, 4, 5, 6] # # combinations = itertools.combinations(my_lis ...

  5. C常量

    C 常量 常量是固定值,在程序执行期间不会改变.这些固定的值,又叫做字面量. 常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量. 常量就像是常规的变量,只不 ...

  6. chroot()使用

    好多的程序,都有使用chroot来是程序chroot到一个目录下面,来保护文件系统,今天在看snort代码的时候,看到了实现,就贴出一个测试程序来,实际上是比较简单的.    chroot()在lin ...

  7. 关于最近练习PYTHON代码的一点心得

    做测试以来,一直想学习代码,以前也断断续续的学习过,不过都是练习一些基础语法,学习的是菜鸟教程,但是效果不大. 最近在练习CODEWAR里做练习题,慢慢强化自己对一些基本语法的理解,熟悉基本的内置函数 ...

  8. PouchContainer 容器技术演进助力阿里云原生升级

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 作者 | 杨育兵(沈陵) 阿里巴巴高级技术专家 我们从 2016 年开始在集团推广全面的镜像化容器化,今年是集团全面镜像化容器 ...

  9. javascript闭包实现缓存小案例

    ​ /* * 闭包实现缓存 * 属性:有个键--值 --->所以可以将缓存数据存放在一个对象中 * 方法:缓存存储 setCache * 缓存的获取 getCache * */ function ...

  10. 推荐两款远程管理Linux工具(基于Windows系统)

    推荐两款远程管理Linux工具(基于Windows系统) 1.Xshell 百度百科:Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows ...