phpseclib无法远程执行命令

时间:2013-08-01 05:45:19

标签: php apache shell phpseclib sudoers

过去3天我在php中遇到问题。找不到解决方案了。

我有一台Cent OS远程机器和一台Ubuntu本地机器。我在本地计算机上有一个名为test.php的php脚本,因此我想使用该php脚本在远程计算机上运行一些Linux命令。我使用phpseclib连接到远程机器。以下是php脚本test.php

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

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2('10.3.2.0');
if (!$ssh->login('makesubdomain','abcdabcd')) {
    exit('Login Failed');
}
echo $ssh->exec('/usr/local/listdomain.backup/test/makedir.sh');
?>

我不能在这里使用root用户,因为root登录已在远程cent os机器中禁用。 所以我创建了这个makesubdomain用户,并通过在makesubdomain ALL=(ALL) NOPASSWD: ALL文件中添加/etc/sudoers来提供sudo权限,也没有密码。下面是一个驻留在10.3.2.0 <的shell脚本/ p>

sudo -H sh -c '
    mkdir /usr/local/testdir
    if [ $? -eq 0 ];then
        echo  "success";
    else
        echo "not success";
    fi
'

但是现在当我使用命令php test.php从终端运行php脚本时,它显示错误sudo: sorry, you must have a tty to run sudo。最终,我需要使用test.phpmakedir.sh使用给定的php脚本和用户testdir创建.sh文件中指定的目录makesubdomain。请建议,因为我是php的初学者。

(注意:我可以使用命令makedir.sh作为用户sudo ./makedir在远程计算机上成功运行makesubdomain文件,而且不会提示输入密码)

修改

我在Defaults requiretty中对/etc/sudoers中的{{1}}进行了评论,并且工作正常。如果不这样做,我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

在执行$ssh->enablePTY()之前尝试拨打$ssh->exec()