原标题:Debian 批量修改linux密码
passwd --stdin user
从标准输入中读取密码,所以用户可以在脚本中使用如
echo ”NewPasswd” | passwd --stdin username
这种方式来批量更改密码
但在其它的一些发行版(如Debian/Suse)所提供的passwd并不支持‘--stdin‘这个参数
此时,我们有另外一种选择 chpasswd
在基于debian的系统中,该程序随“passwd”包提供,在suse9中,该程序由“pwdutils”包提供(可能在redhat系统中也提供了这个工具,我就不太清楚了)。
chpasswd命令从标准输入中读取信息,例如
echo ”username:password” |chpasswd
格式是“Username:Password”
更加方便的是,你可以一次性更改多个用户的密码。
例如有文件passwd.txt,内容如下:
user1:passwd1
user2:passwd2
user3:passwd3
执行
chpasswd
将一次更改user1,user2,user3三个用户的密码。
(或 echo -e ”user1:passwd1\nuser2:passwd2\nuser3:passwd3” |chpasswd ,显然--过多过长的输入会令你眼花,然后出错)
唯一的困扰是基于安全的理由--没有及时删除掉的密码文件(passwd.txt)、命令行的历史(history),可能会泄漏一些敏感信息。除此之外,我个人认为这是个很方便的工具。
注意:不同发行版所提供的chpasswd返回值是不同的,在Debian/Ubuntu上chpasswd出错会返回非0值,而suse下的chpasswd出现错误也会返回0,唯一相同的是在正确执行的情况下,什么都不输出。
-------------------------------------------
下面是一个简单的用例:
#!/bin/bash
[ $# -ne 1 ] && echo ”Usage: $0 UserName” && exit 1
echo -n ”Input new password:”
read -s P
echo
echo -ne ”User: ${1}\tPassword: ${P}, ensure?(y/N)”
read CONFORM
case ”${CONFORM}” in
Y|y|yes|Yes|YES)
;;
echo ”Operation cancelled by user. Bye!”
exit 2
;;
esac
for HOST in `cat list`
do
echo -n ”Setting password for ${1} on ${HOST} ... ”
RET=$(echo ”$1:$P” |ssh -l root ${HOST} ”chpasswd 2>&1|wc -l”)
#此处不判断返回值,在有些发行版(如SUSE9)中,chpasswd返回值并不可靠。
if [ $RET -eq 0 ]
then
echo OK
else
echo ERR
fi
责任编辑: