2015-09-24 111 views
0

我有这个脚本,用户可以在其中透明地使用passwd更改其密码。该脚本本身是由根执行,与Linux passwd命令:格式化输出

su - <user> -c "script" 

启动它,我知道它可能不是非常安全的一个启动脚本的方式,但是这是怎么回事,我没有lattitude改变的那部分。

我的问题是,调用时,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来处理它时,什么都不显示了。

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

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

+1

我复制脚本的将是不错 –

+0

有时密码提示会直接写入您的tty,因此您可能无法轻松隐藏它们。我建议,如果你画在这个特定的角落里,你可以检查'expect'语言。 –

+0

对不起@RolfofSaxony,脚本的最低版本基本上只是调用passwd | grep -v用户(单词用户,不是用户名)。 我会看看期待。谢谢。 – Vartaghan

回答

0

尝试键控:

su - vartaghan -c passwd 

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

passwd 

到命令行上。

答案就在那里。由于您使用su来执行该命令,因此需要输入密码,然后passwd命令变为活动状态,这需要重新输入密码。
您最好的选择是通过发出passwd命令来改变为您的用户运行的menu启动此密码更改外壳的方式。

编辑: 如果你想摆脱的I/O的使用是这样的:

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

这就要求你运行该脚本myscript oldpassword newpassword