Shell脚本免交互修改用户密码

方法1:

echo "password" | passwd testuser --stdin > /dev/null 2>&1

方法2:

echo testuser:password|chpasswd

问题1:
使用方法1报错:passwd 没有 –stdin 选项

问题2:
使用方法2报错:passwd: Authentication token manipulation error
原因2-1:
密码文件/etc/shadow权限问题

sudo lsattr /etc/shadow
#-i选项:不得任意更动文件或目录。
----i---------e---- /etc/shadow
#去掉-i选项
chattr -i /etc/shadow

sudo lsattr /etc/shadow
--------------e---- /etc/shadow
#修改完再加回-i选项
chattr +i /etc/shadow

原因2-2:
我的是命令权限问题,sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有root 权限,所以 bash 会认为这两个命令都没有写入信息的权限。
解决2:

sudo sh -c 'echo robot:RK-robot2020 | /usr/sbin/chpasswd'

参考:

https://blog.csdn.net/zly_ir/article/details/51264874

https://blog.csdn.net/change_can/article/details/115128218