今天的文章没有格式,简单分享一个小技能,就是标题所说–非交互式修改密码。
一、普通方式修改用户密码
最普通的修改密码的命令就是passwd命令
[root@localhost ~]# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost ~]#
在这种方式下,修改密码就需要重复输入两次密码,这在初学的时候没有问题,但是如果密码复杂一点,输入两次,就会出现输错或者输入效率很低的情况。假如有50台机器需要修改密码,这时候passwd命令就是灾难!你要输50次passwd命令,100遍密码!!!这时候就非常需要一个非交互命令来帮助你减轻工作负担,当然,如果你会使用ssh非交互做一个脚本出来,那更好,当然,这就比较考验的Linux脚本功底了。
二、非交互修改密码
1. passed命令+printf命令实现
先看演示,我要改的密码是:5201314my@
[root@localhost ~]# printf "5201314my@\n5201314my@\n" | passwd root
Changing password for user root.
New password: Retype new password: passwd: all authentication tokens updated successfully.
这种方式就是把你要修改的密码通过printf打印参数,将参数通过管道传递到passwd命令中,很容易理解,但是这方法不常用,命令相对还是很繁琐,但是易于理解。
2. usermod命令实现
先看演示,我要改的密码是:5201314my@
[root@localhost ~]# usermod --password $(echo '5201314my@' | openssl passwd -1 -stdin) root
[root@localhost ~]#
这个用法不常见,这个几乎没有人去这么用,这个会比你直接去修改输入还多,只是在这里展示可以这么去做,不做解释。
3.paasswd命令+EOF(自定义终止符)实现
先看演示,我要改的密码是:5201314my@
[root@localhost ~]# passwd root << EOF
> 5201314my@
> 5201314my@
> EOF
Changing password for user root.
New password: Retype new password: passwd: all authentication tokens updated successfully.
[root@localhost ~]#
这种方法和printf有点类似,将密码通过重定向的方式传输到passwd命令中,去自动做交互,但是依然不够简洁。
4.passwd命令+管道+echo命令实现
先看演示,我要改的密码是:5201314my@
[root@localhost ~]# echo '5201314my@' | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
stdin是接受echo后面的字符串做为密码,说白了是还是通过变量赋值和管道传参来实现,这个相比上面三种,就只需要写一次密码,用熟练了相当好使。
注意:echo后面不要忘了加引号把用户名和新密码引起来
5.chpasswd命令实现
先看演示,我要改的密码是:5201314my@
[root@localhost ~]# echo "root:5201314my@" | chpasswd
[root@localhost ~]#
这里使用的是chpasswd命令去做,还是使用管道传递参数。
总结
推荐使用第四种和第五种,他们的区别就是第四种有回显,第五种没有。其他的凭爱好研究吧,看起来貌似并没有减轻干活的负担。