如何在没有提示的情况下使用 passwd 设置用户密码?

Jak*_*les 27 password

我正在编写一个脚本来向系统添加大量用户。其中一部分涉及为每个用户设置默认密码。如何设置用户的密码而不提示我预先输入密码?

不幸的是, passwd 似乎没有说明要设置的新密码的参数。我正在使用 Ubuntu 11.10。

Cae*_*ium 32

尝试用户模式:

usermod --password PASSWORD USERNAME
Run Code Online (Sandbox Code Playgroud)

唯一的问题是这需要一个预先加密的密码字符串,您必须先生成它。

为了生成加密的密码,您可以使用openssl. 例如:

usermod --password $(echo MY_NEW_PASSWORD | openssl passwd -1 -stdin) USERNAME
Run Code Online (Sandbox Code Playgroud)

  • 您还可以使用 openssl 生成加密密码。例如:`usermod --password $(echo my_new_password | openssl passwd -1 -stdin) USERNAME` (19认同)
  • 晚了三年。我无法回答@EricSmith,但我确实发现了一个更简单的命令版本:`usermod --password $(openssl passwd -1 {password}) {username}` (3认同)
  • 将“PASSWORD”放在单引号中总是一个好主意,因为它可能包含一个或多个“$1”、“$2”...您不希望被替换(即,没有任何意义,伪造哈希值)。`usermod --密码 '$HASH' $_user` (3认同)
  • ...我可以使用 mkpasswd 生成。太好了,谢谢! (2认同)

小智 23

您应该查看chpasswd命令(如果在您的 linux 版本中可用):

echo 'userid:newpasswd' | chpasswd
Run Code Online (Sandbox Code Playgroud)

或者,您可以在单独的行上为每个帐户列出 userid:passwd 文件。

就是这样。

  • 这在`Dockerfile`中对我有用 (2认同)

小智 5

受到埃里克·史密斯想法的启发,组合openssl passwdusermod -p指挥奏效了。生成密码的哈希值以及盐值。

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.
Run Code Online (Sandbox Code Playgroud)

然后,将加密的字符串复制到usermod。确保用单引号将其括起来。

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root
Run Code Online (Sandbox Code Playgroud)

在影子文件中检查一下。

$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::
Run Code Online (Sandbox Code Playgroud)