linux集群批量修改密码

环境: (且称主要操作的服务器为主控制端,被修改密码的所有服务器为被控制端)
主控制端: 192.168.0.112
被控制端: 192.168.0.110   192.168.0.113    192.168.0.145 

目的:
    通过主控制端用最快捷简便的方式修改所有被控制端的root密码为admin@123
服务器多了, 不可能一台一台手工操作, 这样费时又费力, 一不小心还可能误操作……
基本思路:
    服务器间建立ssh公钥认证, 这样登陆可以不需要密码, 使用shell批量更改root密码

一、主控制端操作
1.  建立ssh密钥
#ssh-keygen -t rsa            连续3次回车即可生成

2.  将生成的id_rsa.pub 公用文件发送到被控制端(我用的scp, 可用其他方式)
#!/bin/bash
for a in 192.168.0.110 192.168.0.113 192.168.0.145

do
        scp ~/.ssh/id_rsa.pub $a:/home/
done

二、被控制端
# mkdir ~/.ssh
# cat /home/id_rsa.pub >> /root/.ssh/authorized_keys     #将id_rsa.pub的内容追加到authorized_keys 中

三、在主控制端建立批量修改脚本
脚本1:(支持centos,不支持ubuntu)

#!/bin/bash
#============== Though ssh remote server ,auto modify ROOT passwd
for IP in `cat /root/iplist`

        do
#========================= mkpasswd ==========================#

        PWD="admin@123"
        echo $PWD > R_PWD.txt


#=========================== CHPASSWD ========================#
        if [ $? -eq 0 ] ; then
           ssh $IP passwd root --stdin < R_PWD.txt
           echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${IP}\t${R_PWD}\t" >> R_Server.log
        else
          echo -e "$(date "+%Y-%m-%d %H:%M:%S")\t${IP} R_PWD.txt is createfail\tplease check!\t" >> M_pass.log
        fi
        if [ $? = 0 ] ; then
           echo -e "$(date "+%Y-%m-%d %H:%M:%S")\tThe ${IP} passwd is modify OK\t" >> M_pass.log

        else
           echo -e "$(date "+%Y-%m-%d %H:%M:%S")\tThe ${IP} passwd is modifyfail\tplease check!\t" >> M_pass.log

        fi
done


脚本二:
a. 首先将用户名密码一起写入一个临时文件.
root:123456

b. 使用如下命令对用户口令进行修改:
chpasswd < chpass.txt

c. 可以使用 123456 来登录系统,密码修改完毕.
#!/bin/bash
for a in 192.168.0.111 192.168.0.74 192.168.0.86
do
        ssh $a chpasswd < passwd.txt
done


优点:可以很快速方便的修改多个用户密码
缺点:明文密码写在文件里仍然显得不够安全,但是避免了第一种修改方式不能有特殊字符串密码的情况.

脚本三:(支持centos,不支持ubuntu)
a. 用 openssl passwd -1 来生成用户口令,连同用户名一起写入文件.
cat chpass.txt
root:$1$ri2hceVU$WIf.firUBn97JKswK9ExO0
zhaohang:$1$i/Gou7.v$Bh2K6sXmxV6/UCxJz8N7b.


b. 使用如下命令对用户口令进行修改:
chpasswd -e < chpass.txt

c. 可以使用 123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:和上面两种相比大大增强了安全性

附加介绍:
openssl passwd -1 命令可以输出shadow里面的密码,把这个命令生成的秘串更改为你shadow里的密码,那么下次你登录系统就可以用你的生成密码的口令来登录了,使用这个命令,即使口令一样,多次执行生成的密码串也不一样。那个hash值对应的密码是完全随机的基于64位字符编码的28位长,因此要破解它是非常困难的,只要不用那些密码已经公布出来的hash值创建账号,即使这些密码文件被公布也还是比较安全的。使用旧的unix哈希可以去掉 -1 参数。

[root@bl4ck7q~]# openssl passwd -1
Password: 123456
Verifying - Password: 123456
$1$ri2hceVU$WIf.firUBn97JKswK9ExO0

也可以直接使用如下命令来直接生成:
[root@bl4ck7q~]# openssl passwd -1 123456
[root@bl4ck7q~]# openssl passwd -1 -salt "bl4ck7q" 123456


上面命令中的 salt 自己随便输入些东西
因为设置密码的时候密码密文是MD5加密的,在产生哈希值的时候系统回在密文中加如盐从而使密文无法反向破译。
passwd加密的时候系统加的salt是 时间