PHP / SSH:同一会话中的多个命令(做确认)

时间:2017-04-04 14:02:02

标签: php session ssh confirmation

我遇到了PHP和SSH-Extension / Net-SSH-Libary的问题。我使用它将命令发送到NetApp-Filer。所以我想在文件管理器上创建/删除卷。创建卷是没问题的。

但是当我想删除它们时,文件管理员会要求确认("你确定要删除.. y / n")我无法提供NetApp这个信息。对于每个exec-Command 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');

?>

提前感谢!

问候

1 个答案:

答案 0 :(得分:1)

我看到了一些可能的解决方案:

  1. 使用 \n

    $ssh->exec("cd mydir\n./script");
    

    或者使用您的命令创建脚本,例如script.sh并以UNIX格式保存:

    cd mydir
    ./script
    

    然后 exec 脚本:

    $script = file_get_contents("script.sh");
    $ssh->exec($script);
    
  2. 使用;&&分隔命令。

    ssh2_exec($connection, 'command1 ; command2');   //run both uncondtionally)
    ssh2_exec($connection, 'command1 && command2');  //run command2 only if command1 succeeds
    
  3. 像这样使用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中找到所有输出。

  4. Reference