PHP, ssh2_exec não está funcionando corretamente

1

Eu tenho um script de shell makedir.sh como dado abaixo.

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

Eu dei privilégios para um usuário testuser para executar o shell script com o sudo, mas sem perguntar a senha. Para isso eu adicionei a linha abaixo em /etc/sudoers file,

testuser ALL=(ALL) NOPASSWD: ALL

E funciona bem isso, eu poderia rodar comandos com o sudo, mas sem pedir senha. O shell script acima também funciona bem sem pedir uma senha, criando o diretório testdir inside /usr/local . Meu problema começa aqui. Eu quero executar este script de shell de um arquivo php . No cenário atual, o script de shell está residindo em uma máquina remota com endereço IP 10.3.2.0. O seguinte é o meu código php , mas, ao executar este código php, ele não está criando nenhum diretório (testdir) dentro de /usr/local/ . Por favor, informe como eu sou muito iniciante em PHP .

Código 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 (residente em 10.3.2.0 - o mesmo acima do script de shell)

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

Obrigado.

    
por Uvais Ibrahim 30.07.2013 / 13:35

1 resposta

1

phpseclib, uma implementação PHP SSH pura , é geralmente melhor que libssh2. Melhor em diagnósticos e confiabilidade também. No seu caso ... eu tentaria isso:

<?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();
?>

E veja o que diz.

    
por user179863 30.07.2013 / 19:58