使用管道将输入传递给passwd

8
如何使用echo将一些输入重定向到需要用户两次输入的程序中?例如:
echo "somepassword"|passwd someuser

创建了这个错误信息。
Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error
passwd: password unchanged

因为我没有重新输入密码。

尝试使用 expect/auto-expect,我猜这是适合你的正确工具。 - PradyJord
2
请不要这样做。该命令将被存储在命令历史记录中。您的密码可能会被所有人看到。 - Avinash Raj
3个回答

24

您需要两次发送密码:

(echo 'somepassword'; echo 'somepassword') | passwd someuser

2

也可以这样做

echo -e "currentPassword\nNewPassword\nNewPassword" | passwd

-e 选项将使 echo 命令实际使用一个新行,而不仅仅是打印 \n。此选项适用于在需要新密码之前需要当前密码的情况下。如果不需要当前密码,则可以省略它。

echo -e "NewPassword\nNewPassword" | passwd

我也同意这对于多人使用/公共计算机来说是不好的做法,但如果你知道自己在做什么,并且有充分的理由,那么这是可行的。


2
作为root用户,您可以尝试:

echo "somepasswored" | passwd someuser --stdin

--stdin 此选项用于指示 passwd 从标准输入中读取新密码,可以是管道。

如果您不是 root 用户,则不应更改其他用户的密码。如果您真的想要提供 2 个密码,则 expect 是一个很好的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接