今天的文章沒有格式,簡單分享一個小技能,就是標題所說–非交互式修改密碼。
一、普通方式修改用戶密碼
最普通的修改密碼的命令就是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命令去做,還是使用管道傳遞參數。
總結
推薦使用第四種和第五種,他們的區別就是第四種有回顯,第五種沒有。其他的憑愛好研究吧,看起來貌似并沒有減輕干活的負擔。