У меня проблема с PHP и SSH-расширением / Net-SSH-Libary. Я использую его для отправки команд в NetApp-Filer. Поэтому я хочу создать / удалить тома на файлере. Создание томов не проблема.
Но когда я хочу удалить их, податель запрашивает подтверждение («Вы уверены, что хотите удалить .. да / нет»), и я не могу предоставить NetApp эту информацию. Для каждой exec-команды ist начинает новый сеанс.
Можно ли выполнить больше команд в одном сеансе или дать им подтверждение некоторых команд?
Мой код (только удаление тома):
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('172.22.31.53');
if (!$ssh->login('admin', '12Test')) {
exit('Login Failed');
}
echo $ssh->exec("vol unmount $row->name");
sleep(1);
echo $ssh->exec("vol offline $row->name");
sleep(1);
echo $ssh->exec("vol delete $vol_name \n y");
$loesch = mysqli_query($db, "DELETE FROM volumes WHERE id = '$id'");
header('Location: splash.html');
?>
Заранее спасибо!
Привет
Я вижу несколько возможных решений:
использование \n
:
$ssh->exec("cd mydir\n./script");
Или создайте скрипт с вашими командами, например script.sh
и сохраните его в формате UNIX:
cd mydir
./script
затем Exec сценарий:
$script = file_get_contents("script.sh");
$ssh->exec($script);
Используйте либо ;
или &&
разделить команды.
ssh2_exec($connection, 'command1 ; command2'); //run both uncondtionally)
ssh2_exec($connection, 'command1 && command2'); //run command2 only if command1 succeeds
использование stream_set_blocking () как это:
$cmds = [ 'ls', 'ps ux' ];
$connection = ssh2_connect( '127.0.0.1', 22 );
ssh2_auth_password( $connection, 'username', 'password' );
$output = [];
foreach ($cmds as $cmd) {
$stream = ssh2_exec( $connection, $cmd );
stream_set_blocking( $stream, true );
$stream_out = ssh2_fetch_stream( $stream, SSH2_STREAM_STDIO );
$output[] = stream_get_contents($stream_out);
}
Вы найдете все выходные данные в массиве $output
,
Других решений пока нет …