如何在php

时间:2016-10-21 10:08:09

标签: php linux terminal

如果我正在执行这样的多个命令

'sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log'

但是当我用我的用户登录服务器时,我必须通过执行以下命令获得root权限

sudo -s

然后我还要重新输入密码。  所以我的问题是当我执行上面的命令时,我怎么能传递我的密码。因为我必须执行命令并等到它要求输入密码。 请指导我解决。 这是我的代码。

include('Net/SSH2.php');
$ssh = new Net_SSH2('10.0.10.200');
$ssh->login('xxxxx', 'xxxx') or die("Login failed");
echo $ssh->exec('sudo -s && cd /apps/10.0.10.200/wso2am-1.7.0/repository/logs && tail wso2carbon.log');

2 个答案:

答案 0 :(得分:0)

这是一个非常糟糕的主意,只要您需要在代码中保留用户密码,这代表了一个不可忽视的安全问题(对ssh服务器的完全远程访问) )。您应该在要连接的ssh服务器上拥有一个特殊帐户,允许访问您要显示的日志文件。

但是,如果您查看this superuser question或运行sudo --help。您将看到可以使用sudo -S来获取sudo命令以从stdin读取密码。

所以这应该可以解决问题:

$echo <password> | sudo -S <command>

使用php:

echo $ssh->exec('echo '.$password.'| sudo -S tail /apps/10.0.10.200/wso2am-1.7.0/repository/logs/wso2carbon.log');

答案 1 :(得分:0)

转到您的服务器并向用户提供没有密码的sudoers权限。

这是非常不安全的,但您可以使用命令/etc/sudoers编辑sudo visudo

此命令将打开终端中的/etc/sudoers文件,现在您可以使用以下行在其中添加用户条目,以执行没有密码的sudoers命令:

<user_name> ALL=NOPASSWD:ALL

将user_name替换为上一行中的用户名。

如果您的语法出错,可能会损坏您的sudoers文件,因此无法执行sudo命令。 如果发生这种情况,请使用此命令重建sudo文件:

pkexec visudo

然后输入sudo密码。