我有一个Shell脚本,该脚本有时会向Asterisk进行几次调用,并显示一些输出。打电话给星号是我尝试过的第一件事,看来不是可行。我确定我设置为运行脚本的用户没有运行Asterisk的权限,因此我研究了以root身份运行该脚本的方法(可以绕过该角色)(系统上唯一的其他用户)。
我没有运气就尝试使用su
。在过去的两个小时中,我一直在搞弄sudo
和sudoers
,但无法使其正常工作。
例如,这是我的脚本中调用的一些代码,由用户com
运行:
printf "\n"
calls=`sudo "asterisk -rx 'core show channels'" | grep "active call"`
lastinboundcaller=`cat /var/log/asterisk/lastcaller.txt`
printf '%s\n' "Current Call Count: $calls"
printf '%s\n' "Last Inbound Caller: $lastinboundcaller"
输出:
[sudo] password for com:
sudo: asterisk -rx 'core show channels': command not found
Current Call Count:
Last Inbound Caller: Unknown
这里有两个问题,
asterisk -rx "command"
仍然不起作用-换句话说,尽管它具有权限,但仍无法运行Asterisk shell。我尝试更新我的sudoers
文件并在/etc/sudoers.d
中创建一个名为asterisk
的新文件,并将命令放在其中。
我对该文件的最新修改是:
com ALL = (ALL:ALL) NOPASSWD: /usr/sbin/asterisk
在此之前,我尝试过:
com ALL = (root) NOPASSWD: /usr/sbin/asterisk
我的理解是,应该允许用户com
在没有密码的情况下以sudo 的身份执行星号。显然,有些事情不起作用。
我遵循了许多类似的SO帖子的答案,例如:
不幸的是,尽管遵循了我在这个问题上能找到的所有答案,但没有一个对我有用。
有人可以在这里向我指出正确的方向或提出其他建议吗?我已经咨询过Linux专家,这似乎是正确的方法。在Windows中,这一切都是超级容易做到的,而令我惊讶的是,在Linux中却是如此。
答案 0 :(得分:1)
不要引用sudo
的参数。它希望第一个参数是命令的名称,因此它认为整个命令行是程序名称。
应该是
calls=`sudo asterisk -rx 'core show channels' | grep "active call"`
为什么不提示输入当前用户的密码,而不提示root用户密码,但根本不提示输入任何密码。
sudo
就是这样工作的。它提示输入当前用户的密码,并检查/etc/sudoers
以查看是否允许他们运行该命令。您正在考虑使用su
,它会提示您输入root密码。