PHP,ssh2_exec 无法正常工作

PHP,ssh2_exec 无法正常工作

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 代码时,它不会在里面创建任何目录(testdir)/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
'

谢谢。

答案1

phpseclib,一个纯 PHP SSH 实现,通常比 libssh2 更好。诊断和可靠性也更好。对于你的情况...我会尝试这个:

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

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

echo $ssh->exec('./makedir.sh');

echo $ssh->getLog();
?>

看看它说了什么。

相关内容