2013-04-23 136 views
1

我需要从另一台计算机或同一台计算机上使用ssh执行位于/ root/scripts/php中的perl脚本。事情是,我只是不知道如何使PHP登录到根帐户,以只优先于该文件。我该如何运行需要root权限的perl脚本?

由于用户$我无法访问/ root/scripts /,因此我无法使用excec或system调用它。我曾尝试使用SSH登录到sudo su,当我给我的密码它挂起。

我离开这里的代码:

<?php 
include('Net/SSH2.php'); 


$ssh = new Net_SSH2('IP'); 
if (!$ssh->login('user', 'password')) { 
exit('Login Failed'); 
}else{ 
echo ("login suscess"); 
} 
echo $ssh->read(']$'); 

echo $ssh->write("sudo su\n"); 

echo $ssh->read('user:'); 
//the code normally runs if I dont write the lines below 

$ssh->write('password\n');//here I try to get ssh the root pass but php wont respond after this 
echo $ssh->read('user]#');//normally this would work to show the root prompt but I don't know what happens 


?> 

我希望你能帮助我在这里。

+1

当你已经使用登录到root的时候,你为什么要执行sudo su? – bwoebi 2013-04-23 19:56:22

+0

对不起,我没有注意到我在有用户的地方留下了根,在我写这个问题之前,这只是一个测试,我忘记了将用户放回去。 – 2013-04-23 20:05:13

+0

通过ssh的远程root是一个巨大的安全漏洞。你会更好地以普通用户身份登录,然后授予该用户sudo对特定脚本的访问权限。 – 2013-04-23 20:24:14

回答

1

通常你会告诉sudo,web服务器用户可以执行该脚本,而无需使用密码进行身份验证。你必须添加类似下面的一行在/etc/sudoers

www-data ALL=(ALL:ALL) NOPASSWD: /root/scripts/script.pl 

这将让www数据用户通过sudo执行script.pl,而无需输入密码。

然后从PHP使用

exec('sudo /root/scripts/script.pl'); 
+0

我运行exec('whoami'),它返回apache,我想我必须用apache重新填写WWW数据我是吗? – 2013-04-23 20:10:19

+0

是的。在这种情况下用'apache'替换'www-data' – hek2mgl 2013-04-23 20:27:12

+0

谢谢! – 2013-04-23 21:36:03

相关问题