0

以下のようなシェルスクリプトがありmakedir.shます。

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

ユーザー testuser に、sudo を使用してシェル スクリプトを実行する権限を与えましたが、パスワードを要求する必要はありません。このために、/etc/sudoersファイルに以下の行を追加します。

testuser ALL=(ALL) NOPASSWD: ALL

そして、sudoを使用してコマンドを実行できましたが、パスワードを要求せずに問題なく動作しました。上記のシェル スクリプトも、パスワードを要求せずに正常に動作し、testdir内にディレクトリを作成します/usr/local。私の問題はここから始まります。このシェル スクリプトをファイルから実行したいと考えていphpます。現在のシナリオでは、シェル スクリプトは 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 に常駐 - 上記のシェル スクリプトと同じ)

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

ありがとう。

4

2 に答える 2

0

うーん...質問は1年前のxDでしたが、少しトリックが必要なssh2_execでsudoを使用するのはまだ半分かもしれません。安全ではなく、お勧めしませんが、他に選択肢がない場合は使用してください

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

スクリプトは引数 -S で sudo を呼び出す必要があります

"sudo -S mkdir folder"

動作するはずです

于 2015-03-12T15:23:08.443 に答える
0

私が知っていることから、sudo コマンドは php の ssh2 モジュールからは機能しません。ディレクトリへのアクセス許可を持つユーザーとして接続する必要があります。

于 2013-08-22T11:03:47.057 に答える