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)