chpasswd命令工作原理:
从系统的标准输入读入用户的名称和口令,并利用这些信息来更新系统上已存在的用户的口令!
语法:
1:# echo 用户名:密码 | chpasswd
2:# chpasswd < doiido.txt
相关参数:
-e :如果使用了-e选项,口令将只能以加密的方式传递
-e, --encrypted supplied passwords are encrypted
如果未使用-e选项,口令将按明文的形式传递
注意事项
1:用户名必须是系统上已存在的用户
2:普通用户没有使用这个指令的权限
3:如果输入文件是按非加密方式传递的话,请对该文件进行适当的加密。
4:指令文件不能有空行
实例
1、直接修改centos用户的密码为centos1
# echo centos:centos1 |chpasswd
2、使用password.txt里面的用户名密码批量修改相应用户的密码
2.1:首先建立指令文件password.txt(txt文件格式为[username:passwd])
# vi password.txt
test1:redhat123
test2:redhat123
2.2:将password.txt的内容传输到chpasswd指令来修改相应用户的密码
# chpasswd < password.txt
3、让普通用户使用chpasswd
默认普通用户是没有chpasswd的权限,但是可以通过修改命令文件权限来修改
# chmod 4755 /usr/sbin/chpasswd
这样普通用户就可以使用chpasswd来修改密码
4、批量远程修改服务器密码
比如利用saltstack或者ansible批量修改受控端服务器密码
首先要配置服务端与客户端的ssh无密码登录认证,然后批量修改
一个简单的shell脚本:
cat alter_pwd.sh
#!/bin/bash
ips=`cat server_name.cfg`
for ip in $ips
do
ssh $ip "echo 'root:123456798' |chpasswd"
if [ $? -eq 0 ]
then
echo -e "$ip's password updated \033[32m successful.\033[0m"
else
echo -e "$ip's password updated \033[31m failed!!!\033[0m"
fi
done
注:server_name.cfg 文件中是受控段服务器IP地址(一行一个IP)