【问题标题】:Linux passwd command : formatting the ouputLinux passwd 命令:格式化输出
【发布时间】: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:

这里有几点需要注意:

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

有没有人得到任何关于这种情况的答案或提示?非常感谢。

(这里是第一个问题,因此请随时询问更多信息。)

【问题讨论】:

  • 我的脚本副本会很好
  • 有时密码提示会直接写入您的 tty,因此您可能无法轻松隐藏它们。如果你被画到这个特定的角落,我建议你检查expect 语言。
  • 对不起@RolfofSaxony,脚本的最低版本基本上就是调用passwd | grep -v user(单词用户,而不是用户名 )。我会看看期待。谢谢。
  • @Vartaghan 你为什么还要为这个脚本而烦恼。任何用户都可以通过自己直接在命令行上输入passwd 来更改他们的密码,而不用搞乱su - &lt;user&gt; -c "script" 业务。
  • 因为用户无法访问纯 shell,但可以访问在其上运行的菜单,并且除其他选项外,还允许他更改密码。菜单是从 inittab 加载的,所以由 root 加载。我在这里没有太多选择。

标签: linux bash stdout stderr passwd


【解决方案1】:

尝试键控:

su - vartaghan -c passwd

进入命令行,然后与键位对比:

passwd

到命令行。

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

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

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

这要求您以myscript oldpassword newpassword 身份运行脚本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多