我遇到了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');
?>
提前感谢!
问候
答案 0 :(得分:1)
我看到了一些可能的解决方案:
使用 \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
中找到所有输出。