su将密码传递给脚本

时间:2013-10-03 16:20:36

标签: sudo sudoers

我正在尝试编写一个运行以下命令的脚本:

sudo su
runmqsc_result=`su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"`

我的问题是,这些命令是由sudoers文件中的用户作为shell脚本的一部分运行的。但是,显然sudo su要求运行它的用户的密码。

我需要做的是将密码传递给sudo su,以便脚本自动运行。我怎么能这样做?

p.s:我无法更改运行的权限&#34; runmqsc&#34; ...它必须以用户mqm运行,需要从root用户切换到。

2 个答案:

答案 0 :(得分:14)

来自man sudo

-S    The -S (stdin) option causes sudo to read the password from the standard
      input instead of the terminal device.  The password must be followed by a
      newline character.

因此,虽然违反了所有安全原则,但echo 'password' | sudo -S su [...]应该有效。


或者,您可以使您的脚本只能由root写入,并将以下内容添加到/etc/sudoers,以允许用户johndoe使用root权限运行它,而无需输入密码:

johndoe ALL = NOPASSWD: /full/path/to/your/script

只能由root 编写的部分对于防止johndoe修改脚本并以root身份执行任意命令非常重要。

答案 1 :(得分:0)

此解决方案使用&#39;脚本&#39;来自&#39; bsdutiles&#39;设置pty(终端)的包。睡眠&#39;命令是为了防止在&#39; su&#39;之前发送密码。命令已准备好读取它。 &#39;尾巴&#39;命令删除&#34;密码:&#34;输入行由&#39; su&#39;。

发出
 { sleep 1; echo rootpassword } | script -qc 'su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"' /dev/null | tail -n +2

请注意rootpassword可以通过多种方式查看(history,ps,/ proc /等等)。使用空格启动命令以至少避免历史记录。