我有一个项目需要我编写脚本/命令序列来更改 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
时只需发送一次密码。所以正确的版本是如果您的代码示例是准确的,那么 (a) 当您需要简单的正向引号时,您在此处有智能引号,并且 (b) 密码可能设置为类似 `password\npassword' 的内容(可能两边都带有智能引号)。
使用命令使事情工作
passwd
令人印象深刻,因为它传统上是交互式的并且很难自动化。(对于 gnu 一代来说,让它相对轻松。)但是如果你正在做自动化,为什么不使用对自动化更友好的命令,比如chpasswd
?会做你在上面做的事情。如果你想一次做 50 行,只需发送更多的
username:password
.