我可以在命令行中无交互地在Linux中更改用户密码吗?


15

我有一个特定的用例,我真的很希望能够用一个没有交互性的命令来更改用户的密码。这是以安全的方式进行的(通过SSH,并且在只有一个用户可以登录的系统上),因此可以在命令行中公开新密码(如有必要,甚至可以使用旧密码)。FWIW,这是一个Ubuntu系统。

我只想避免仅为此一项任务就向该系统添加类似于Expect的内容。


3
对于那些想在FreeBSD上执行此操作的人:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

Answers:



5

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


1
......但是我的AIX系统没有usermod:'( -我会固定在问题标签。
voretaq7

3

当然。

  1. 将密码散列在本地系统上。
  2. 连接到远程计算机(您要在其中更改密码)
  3. 订阅哈希密码和用户名的创意sed,更新系统密码文件脚本(/etc/shadow/etc/master.passwd,不管它恰好是)。

1

passwd实用程序具有--stdin选项,其中指出:

此选项用于指示passwd应该从标准输入(可以是管道)中读取新密码。

句法:

echo "newpass" | passwd --stdin user1

即使您说过您不在乎,您也可以将密码放在文本文件中,然后cat pass.txt代替echo命令,这样便不会在bash历史记录中显示该密码。


就是那个。 echo VerySecret | passwd --stdin username
MadHatter

5
我的Ubuntu系统没有--stdin的选项passwd
杰夫·费兰德

您说得对,事实并非如此。我在CentOS系统和Mac上都进行了检查,它们都具有--stdin选项,因此删除它必须是Ubuntu的事情。
2011年

1
@RyanM。FreeBSD(以及我最后检查的AFAIK NetBSD和OpenBSD,AIX,HP-UX和Solaris)都不支持--stdin-主要是因为这是一个巨大的安全漏洞,正在等待发生:-)
voretaq7

1
@quanta:或者echo "newpass" | passwd --stdin user1以空格开头;这样一来,它根本就不会破坏历史。
Janne Pikkarainen

1

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

  1. 请使用chpaswd脚本中调用的另一个实用程序。
  2. 或使用 echo "current_password\nnew_password\nnew_password" | passwd user_name
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.