以编程方式更改密码

Jam*_*lor 16 linux scripting password raspbian

在当前版本的 Raspian 中,我知道可以从命令行更改当前登录用户的密码,如下所示:

sudo passwd
Run Code Online (Sandbox Code Playgroud)

然后会提示用户输入新密码两次。这将产生如下输出:

Changing password for pi.
(current) UNIX password:
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能以编程方式更改密码,例如从 shell 脚本更改密码。

我正在尝试制作一个配置脚本以部署在我的 Raspberry Pi 上,我不想手动为它们输入新密码。

der*_*ert 27

您正在寻找chpasswd命令。你会做这样的事情:

echo 'pi:newpassword' | chpasswd # change user pi password to newpassword
Run Code Online (Sandbox Code Playgroud)

请注意,它需要以 root 身份运行,至少使用默认的 PAM 配置。但大概以 root 身份运行对于系统部署脚本来说不是问题。

此外,您可以通过向其提供多行输入来一次处理多个用户。


Tim*_*tin 12

另一种选择是yes在脚本中使用该命令。

yes newpassword | passwd youruser
Run Code Online (Sandbox Code Playgroud)

这将发送newpasswordpasswd命令youruser

应该提到的是,通过脚本设置/修改用户密码可能会带来安全风险,应尽可能避免。

编辑:

此答案需要 root 访问权限。很抱歉之前没有提到这一点。这是我在执行需要 root 访问权限的管理任务时使用的一种方法。

  • @roaima Linux 影子实用程序中的 `passwd` 命令接受重定向输入(与 OpenSSH `ssh` 不同)。不过,使用“yes”并不是一个好主意:它会将密码暴露给在错误时间查看进程列表的窥探者。使用 `echo` 不会有这个缺陷,因为它是 shell 内置的。 (2认同)
  • 这实际上是所有这些答案中唯一在我们的应用程序中有效的答案。我们在运行旧版 Busybox 的嵌入式设备上,这里不存在使用的其他程序。 (2认同)