[转载]批量修改linux密码

原文地址:http://hi.baidu.com/test/blog/item/d064d0163b799f1

批量修改linux密码
2007-04-03 20:22在某些redhat issue中(报歉,REDHAT的发行版我用过的并不是太多,所以只能言“某些”),更改密码可以用

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 <passwd.txt

将一次更改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
done

This entry was posted in Linux, 转载 and tagged . Bookmark the permalink.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>