我正在尝试编写一个运行以下命令的脚本:
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用户切换到。
答案 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 /等等)。使用空格启动命令以至少避免历史记录。