“passwd”和“chpasswd”有什么区别?

“passwd”和“chpasswd”有什么区别?

我从书中读到了这些命令的描述,
密码:

更改现有用户的密码。

chpasswd:

读取登录名和密码对的文件,并更新密码。

这些命令似乎做着同样的工作。它们之间有区别吗?

编辑:

我想了解当我们使用它们时哪些文件发生了变化。他们更改相同的文件还是不同的文件?如果他们更改了不同的文件,它们是什么?

答案1

man chpasswd

“此命令旨在用于一次性创建许多帐户的大型系统环境。”

passwd(根据我的经验)通常为单个用户交互使用。

答案2

简而言之:

  • passwd使用 . 检查 STDIN(文件描述符 0)是否连接到终端isatty(0)。如果没有,passwd就可以退出,即您只能passwd交互工作

  • chpasswd另一方面,旨在从 STDIN 读取(用户名和)密码,称为批处理模式(一次创建/更新多个用户凭据)。它从 STDIN 读取密码(默认情况下以明文形式)和用户名,以格式给出user_name:password,并用换行符分隔条目

答案3

请参阅它们的手册页:

姓名

    chpasswd - 以批处理模式更新密码

概要

    chpasswd[选项]

描述

    chpasswd命令从标准输入读取用户名和密码对的列表,并使用此信息更新一组现有用户。每行的格式为:

       用户名密码


姓名

    passwd——更改用户密码

概要

    passwd[选项] [登录]

描述

    passwd命令更改用户帐户的密码。普通用户只能更改自己帐户的密码,而超级用户可以更改任何帐户的密码。  passwd还会更改帐户或关联密码的有效期。

答案4

我发现虽然

echo user:password | chpasswd

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

另一方面,该passwd命令似乎不需要交互式 shell,

(echo user; echo password) | passwd

适用于物理主机和容器,适用于各种操作系统(ubuntu xenial-bionic、debian9-10、centos75-76、coreos1855-2135)

相关内容