我可以通过命令行在Linux中更改用户密码吗?

我有一个特定的用例,我真的很希望能够通过一个没有交互性的命令来更改用户的密码。 这是以安全的方式完成的(通过SSH,以及只有一个用户可以login的系统),所以在命令行上公开新密码(甚至是旧密码,如果需要的话)是很好的。 FWIW,这是一个Ubuntu系统。

我只想避免为这个任务添加一些像Expect一样的系统。

你可以使用chpasswd 。

 echo user:pass | /usr/sbin/chpasswd 

您可以使用带有-p选项的usermod来提供密码哈希(不是实际的密码)。 您可以使用类似mkpasswd -m sha-256mkpasswd -m md5来生成密码哈希

当然。

  1. 将密码存储在本地系统上。
  2. 连接到远程机器(您要更改密码的地方)
  3. 将散列的密码和用户名提供给更新系统密码文件( /etc/shadow/etc/shadow /etc/master.passwd ,无论它是什么)的创意sed脚本。

passwd实用程序有一个–stdin选项,指出:

这个选项用于表示passwd应该从标准input中读取新的密码,这个input可以是一个pipe道。

句法:

 echo "newpass" | passwd --stdin user1 

即使你提到你不关心,你可以把密码放在一个文本文件中,然后用cat pass.txt代替echo命令,这样它就不会出现在bash历史logging中。

如果--stdin选项不工作,我们基本上可以使用两个选项:

  1. 在脚本中使用另一个名为chpaswd的工具。
  2. 或者使用echo "current_password\nnew_password\nnew_password" | passwd user_name echo "current_password\nnew_password\nnew_password" | passwd user_name