linux echo 改密码,Debian 批量修改linux密码

原标题: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

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值