Linux Shell:非交互式修改root密码

kevin.Zhu 发布于:2013-12-3 13:41 分类:Linux  有 17 人浏览,获得评论 0 条  

很多时候我们需要修改系统的密码,而且我们知道,修改密码可以使用passwd这样的工具,也可是使用usermod这样的工具,但是在Openwrt中你唯一的选择就是passwd工具,没有其他的工具可以选择。

但是使用Passwd工具的时候就发现问题了,这个程序需要接受一个用户名作为参数的同时还需要输入两遍新密码,那我们应该如何做呢。

这里就不掉大家胃口了,直接写出来可以使用的方案,并分享下成功之前可能尝试的方案,作为经验和大家分享。



(echo "newpasswd";sleep 1;echo "newpasswd) | passwd > /dev/null

上面的方法可以完美的非交互的修改密码


Linux Shell:[1]非交互式修改root密码



  



这里是 交互方式 修改用户密码,使用 passwd 命令,输入两次相同的密码即可修改成功。

(注意:为了保护用户密码安全,输入的内容不回显的)

Linux Shell:[1]非交互式修改root密码

  





我们进行第一次尝试,尝试传递密码给passwd,格式是:

passwd 用户名 新的密码

结果显而易见,没有成功。

Linux Shell:[1]非交互式修改root密码

  




然后使用 echo + 管道的方式进行传递,结果仍然失败。


Linux Shell:[1]非交互式修改root密码

  




     

  



这时候我们使用万能的 xargs 参数传递函数,仍然不能工作。


Linux Shell:[1]非交互式修改root密码




这一次尝试传递更完整的参数,分别传递内容是:

①用户名

②新的密码

③新的密码的确认

Linux Shell:[1]非交互式修改root密码

   



这时候我们尝试连续echo两次新的密码给passwd工具,发现因为传输速度过快,导致passwd第二次没有收到参数,认为两次输入不一致,修改不成功。到了这里相信您应该想到办法了吧。

Linux Shell:[1]非交互式修改root密码

     

 



总结了上面的所有的失败案例之后,我们终于想到了,在两次输出之前使用sleep函数进行中间停顿,然后再次输出第二个参数,于是修改成功了。

结论是:(echo "newpasswd";sleep 1;echo "newpasswd) | passwd > /dev/null

Linux Shell:[1]非交互式修改root密码