Linux服务器集群批量修改密码
笔者以前写过linux集群配置免密—局域网中服务器群配置ssh免密。为了完成等保测评的定期修改密码的要求,今天在此基础上来做Linux服务器集群批量修改密码。
在正式开始之前,学习以下chpasswd和passwd工具的使用方法。
一、chpasswd
chpasswd命令是批量更新用户口令的工具,是把一个文件内容重新定向添加到/etc/shadow中。
1、echo root:passwd | chpasswd 。
直接修改root用户的密码为passwd 。
2、chpasswd < chpass.txt 。
使用chpass.txt里面的用户名密码批量修改相应用户的密码。txt文件中的格式如下,和上面的方式一样,以冒号:来区分用户名和密码。
user1:MYPASS1
user2:MYPASS2
需要注意的是chpasswd工具使用者是root,需要root用户才能执行。chpasswd权限是755,所有用户都有执行权限,但是在执行时会提示 chpasswd:无法锁定 /etc/passwd 。这是因为访问一些只有root用户才有权访问的文件,那么其他用户可能因为权限不够还是不能使用。
chpasswd快速方便的修改多个用户密码,但是明文密码写在文件里仍然显得不够安全。
二、passwd
passwd命令用来更改使用者的密码。
echo password | passwd --stdin mycentos
输入的指令能被别人通过history或者其他方式捕获,密码同时含有单引号和双引号,那么则无法通过这种方法修改。而且其它的一些发行版(如Debian/Suse)所提供的passwd并不支持--stdin这个参数。
批量修改密码脚本multi_chpasswd.sh。
此脚本的前提是服务器集群以及配置了免密,详情参考笔者配置ssh免密的文章。
#!/bin/bash
#修改root用户密码:echo #root:helloboy | chpasswd
GCOLOR="\e[47;32m ------ [OK] \e[0m"
WCOLOR="\e[43;31m ------ [BAD] \e[0m"
if [ $# -ne 2 ] ; then
echo "Usage: $0 <nodes_files> <cmd_line>"
exit
fi
for i in `cat $1 | grep -v ^# | grep -v ^$`
do
echo $i
node=$i
ssh -l root $node "$2"
if [ $? -eq 0 ]
then
echo -e "Node:$i doing is $GCOLOR"
else
echo -e "Node:$i doing is $WCOLOR"
fi
done
使用方法:./multi_do.sh chpass.txt "echo root:helloboy | chpasswd"
在实际运用中,可以只保留执行错误的信息显示,或者将执行信息存入log文件中保存。
chpasswd命令是批量更新用户口令的工具,是把一个文件内容重新定向添加到/etc/shadow中
来自: http://lnmp.ailinux.net/chpasswd
passwd命令用来更改使用者的密码