0

我有一个makedir.sh如下所示的 shell 脚本。

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

我已授予用户 testuser 权限以使用 sudo 执行 shell 脚本,但无需询问密码。为此,我在/etc/sudoers文件中添加以下行,

testuser ALL=(ALL) NOPASSWD: ALL

而且效果很好,我可以使用 sudo 运行命令,但无需询问密码。上面的 shell 脚本也可以正常工作,无需询问密码,testdir/usr/local. 我的问题从这里开始。我想从一个php文件中运行这个 shell 脚本。在当前场景中,shell 脚本驻留在 IP 地址为 10.3.2.0 的远程机器中。以下是我的php代码,但是,在运行这个 php 代码时,它没有在/usr/local/. 请告知,因为我是PHP.

PHP 代码

<?php
if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
if(!($con = ssh2_connect("10.3.2.0", "22")))
{
    echo "fail: unable to establish connection";
}
else
{
    if(!ssh2_auth_password($con, "testuser", "abcdef"))
    {
        echo "fail: unable to authenticate ";
    }
    else
    {
        $stream = ssh2_exec($con, "./makedir.sh");
            stream_set_blocking($stream, true);
        $item = "";
        while ($input = fread($stream,4096)) {
               $item .= $input;
        }
        echo $item;
    }
}

?>

SHELL SCRIPT - makedir.sh(位于 10.3.2.0 - 与上述 shell 脚本相同)

#!/bin/sh
sudo -H sh -c '
    mkdir /usr/local/testdir;
    if [ $? -eq 0 ];then
        echo "Successfull";
    else
        echo "Unsuccessfull";
    fi
'

谢谢。

4

2 回答 2

0

据我所知,sudo 命令不适用于 php 的 ssh2 模块。您将需要以对目录具有权限的用户身份进行连接。

于 2013-08-22T11:03:47.057 回答
0

嗯......问题是一年前的xD,但我仍然可能会停止使用sudo 和ssh2_exec 你需要一个小技巧。这是不安全的,不推荐,但如果您别无选择,请使用

ssh2_exec($connection, "echo sudopw | yourscript.sh" . PHP_EOL);

并且您的脚本必须使用参数 -S 调用 sudo

"sudo -S mkdir folder"

应该管用

于 2015-03-12T15:23:08.443 回答