通过脚本更改 root 密码失败但报告成功

通过脚本更改 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真的发生了变化,但这忽略了密码设置为原有值的情况,我希望支持这种情况。

是否有人建议在实际设置密码之前尝试验证密码,或者最好获取完整输出passwd

答案1

使用时passwd --stdin只需发送一次密码即可。所以正确的版本是

echo password | passwd --stdin

如果您的代码示例是准确的,那么(a)当您需要直接的前向引号时,您就会在那里得到智能引号,并且(b)密码可能被设置为类似“password\npassword”的内容(可能两侧都有智能引号)。

答案2

使用命令让事情运转起来passwd令人印象深刻,因为它传统上是交互式的,而且自动化起来很麻烦。(GNU 一代让它变得相对轻松,真是太好了。)但是如果你在做自动化,为什么不使用更适合自动化的命令呢,比如chpasswd

echo root:password | chpasswd

将执行上述操作。如果您想一次执行 50 个,只需发送更多行即可username:password

相关内容