私は SSH ラッパー ( https://github.com/bubba-h57/PHP-SSH2 ) を作成して、リモート サーバーに SSH で接続する必要がある多くの独自の PHP スクリプトを容易にしましたが、この問題に頻繁に遭遇しました。
私はこの呪文でそれを解決しました:
echo <password> | sudo -S <command>
あなたにとっては、次のようになります。
fwrite($shell, "echo $mySudoPassword | sudo -S ls -la\n");
必要かどうかに関係なく、sudo を使用するたびにパスワードをパイプするだけです。
独自のラッパーを使用すると、次のようになります。
require_once 'SSH2.php';
// Test Unix
$username = 'someuser';
$password = 'somepwd';
$host = 'somenixhost.com';
$port = 22;
$ssh2 = new My_SSH2($host, $port);
$ssh2->authPassword( $username, $password);
$ssh2->setPrompt(':~#'); // Set initial expected prompt
$ssh2->openShell();
$ssh2->setPrompt("MYCUSTOMSSHPROMPT> "); // Create a unique, easily found prompt
$ssh2->exec("PS1='MYCUSTOMSSHPROMPT> '"); // Execute the command.
echo $ssh2->exec('cd /var/www') . "\n"; // Change directories.
echo $ssh2->exec("echo $password | sudo -S ls -la\n") . "\n"; // Print LS
echo "\n===================Begin History=============\n";
echo $ssh2->getHistory();
$ssh2->disconnect();
echo "\n===================end=============\n";
exit;