Centos
通過腳本更改 root 密碼失敗但報告成功
我有一個項目需要我編寫腳本/命令序列來更改 CentOS 7 安裝上的 root 密碼。
我可以假設將執行腳本的使用者已經是 root。
目前,我正在使用以下內容,並收到一條成功消息:
[root@localhost]# echo -e ‘password\npassword’ | (passwd --stdin root) Changing password for user root. passwd: all authentication tokens updated successfully.
但是,這實際上並沒有更改密碼。經過進一步檢查(手動設置密碼),我注意到密碼
password
沒有通過字典檢查,但最後仍然報告成功:[root@localhost]# passwd Changing password for user root. New password: BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word Retype new password: passwd: all authentication tokens updated successfully.
一種可能的解決方案是嘗試根據 中提供的方法和鹽對給定密碼進行雜湊處理
/etc/shadow
,但我想避免過於復雜的解決方案。我還可以檢查中的值是否/etc/shadow
實際更改,但這忽略了密碼設置為它已經是的情況,我想支持這種情況。有沒有人建議在實際設置密碼之前嘗試驗證密碼,或者最好從 FULL 輸出
passwd
?
使用
passwd --stdin
時只需發送一次密碼。所以正確的版本是echo password | passwd --stdin
如果您的程式碼範例是準確的,那麼 (a) 當您需要簡單的正向引號時,您已經有了智能引號,並且 (b) 密碼可能被設置為類似 `password\npassword’ 的東西(可能兩邊都帶有智能引號)。
使用命令使事情工作
passwd
令人印象深刻,因為它傳統上是互動式的並且很難自動化。(對於 gnu 一代來說,它使其相對輕鬆。)但是如果你正在做自動化,為什麼不使用對自動化更友好的命令,比如chpasswd
?echo root:password | chpasswd
會做你在上面做的事情。如果你想一次做 50 行,只需發送更多的
username:password
.