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


21

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

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

Answers:


22

试试usermod:

usermod --password PASSWORD USERNAME

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


1
...我可以使用mkpasswd生成。太好了,谢谢!
Jake Petroules

16
您也可以使用openssl生成加密的密码。例如:usermod --password $(echo my_new_password | openssl passwd -1 -stdin) USERNAME
埃里克·史密斯

1
三年为时已晚。我无法给出答案@EricSmith,但我确实发现了一个更有效的命令版本:usermod --password $(openssl passwd -1 {password}) {username}
BoCoKeith

13

您应该查看chpasswd命令(如果您的Linux风格可用):

echo 'userid:newpasswd' | chpasswd

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

而已。


这对我Dockerfile
有用

1

受到埃里克·史密斯(Eric Smith)的想法的启发,组合openssl passwdusermod -p指挥取得了成功。生成密码的哈希值以及盐值。

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43
$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

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

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

在影子文件中签出。

$ grep root /etc/shadow
root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

0

您应该使用密码时效,并设置用户,以便他们在首次登录时必须更改其密码。看到这篇文章


这些帐户打算仅用作FTP帐户,但还是建议。;)
Jake Petroules

0
(echo user; echo password) | passwd

适用于我在物理主机和容器中使用的各种操作系统(ubuntu xenial,bionic,debian9,10,centos75,76,coreos)

echo user:password | chpasswd

适用于某些操作系统,但是某些操作系统(例如debian9,10)将显示错误,can not connect to /var/run/nscd/socket因为它使用/etc/nsswitch.conf来确定密码的存储位置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.