【发布时间】:2015-09-25 16:40:07
【问题描述】:
我有这个脚本,用户可以在其中透明地使用 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:
这里有几点需要注意:
- 为什么它甚至以两行开头?似乎第一个在 root 调用 passwd 时显示,第二个在他自己调用 passwd 时显示。可以作为解释的开始吗?
- 我需要从这些提示中过滤掉一些词。我想过使用 greps 和 seds 的组合一个接一个地通过管道传输,但诀窍是:前两行似乎输出到 stdout,而其他行输出到 stderr。当我尝试将 stderr 重定向到 stdout 以对其进行处理时,不再显示任何内容。
有没有人得到任何关于这种情况的答案或提示?非常感谢。
(这里是第一个问题,因此请随时询问更多信息。)
【问题讨论】:
-
我的脚本副本会很好
-
有时密码提示会直接写入您的 tty,因此您可能无法轻松隐藏它们。如果你被画到这个特定的角落,我建议你检查
expect语言。 -
对不起@RolfofSaxony,脚本的最低版本基本上就是调用passwd | grep -v user(单词用户,而不是用户名
)。我会看看期待。谢谢。 -
@Vartaghan 你为什么还要为这个脚本而烦恼。任何用户都可以通过自己直接在命令行上输入
passwd来更改他们的密码,而不用搞乱su - <user> -c "script"业务。 -
因为用户无法访问纯 shell,但可以访问在其上运行的菜单,并且除其他选项外,还允许他更改密码。菜单是从 inittab 加载的,所以由 root 加载。我在这里没有太多选择。
标签: linux bash stdout stderr passwd