0

我有这个脚本,用户可以在其中透明地使用 passwd 更改其密码。脚本本身由root执行,启动它

su - <user> -c "script"

我知道启动脚本的方式可能不是很安全,但事实就是这样,我无权更改该部分。

我的问题是,当调用时, passwd 显示以下内容:

Changing password for user <user>.
Changing password for <user>
current (UNIX) password:
New UNIX password:
Retype new UNIX password:

这里需要注意几点:

  1. 为什么它甚至以两行开头?似乎第一个在 root 调用 passwd 时显示,第二个在他自己调用 passwd 时显示。可以作为解释的开始吗?
  2. 我需要从这些提示中过滤掉一些词。我想过使用 greps 和 seds 的组合,一个接一个地通过管道传输,但诀窍是:前两行似乎输出到 stdout,但其他行输出到 stderr。当我尝试将 stderr 重定向到 stdout 来处理它时,不再显示任何内容。

有没有人对这种情况有任何答案或提示?非常感谢。

(这里的第一个问题,所以不要犹豫,询问更多信息。)

4

1 回答 1

0

尝试键控:

su - vartaghan -c passwd

到命令行,然后将其与键控进行对比:

passwd

到命令行。

答案就在那里。因为您正在使用su执行命令,所以它需要输入密码,然后passwd命令变为活动状态,这需要再次输入密码。
您最好的选择是更改menu为您的用户运行的方式,只需发出passwd命令即可启动此密码更改外壳。

编辑:如果你想摆脱 I/O 使用类似的东西:

(echo $1; echo $2; echo $2) | passwd &>/dev/null

这要求您将脚本运行为myscript oldpassword newpassword

于 2015-09-25T08:19:03.750 回答