Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将phpseclib与自定义shell包装器一起使用_Php_Shell_Phpseclib_Dokku_Dokku Alt - Fatal编程技术网

将phpseclib与自定义shell包装器一起使用

将phpseclib与自定义shell包装器一起使用,php,shell,phpseclib,dokku,dokku-alt,Php,Shell,Phpseclib,Dokku,Dokku Alt,我正在使用PHPSeclib访问安装了dokku alt的服务器: 通过以下典型示例,我成功地将命令发送到我帐户上的自定义shell: $ssh=$this->connect(); echo trim($ssh->exec("version"); 这相当于 ssh dokku@my.node.org version 并按预期工作。但是,如果我试图执行一个命令,该命令要求我通过STDIN发送数据,则会出现问题。根据netu SSH2文档,我需要将数据写入SSH流,而

我正在使用PHPSeclib访问安装了dokku alt的服务器:

通过以下典型示例,我成功地将命令发送到我帐户上的自定义shell:

    $ssh=$this->connect();
    echo trim($ssh->exec("version");
这相当于

ssh dokku@my.node.org version
并按预期工作。但是,如果我试图执行一个命令,该命令要求我通过STDIN发送数据,则会出现问题。根据netu SSH2文档,我需要将数据写入SSH流,而不是使用exec。不幸的是,我的下一个示例不起作用,因为自定义shell不接收任何参数,并使用帮助页面进行响应:

    $ssh=$this->connect();
    $ssh->write("mysql mariadb:console myapp newdb\n");
    $ssh->write("show tables\n");
    $ssh->read('[prompt]');
结果与实验结果一致

ssh dokku@my.node.org
它只是以帮助页面进行响应

如何结合exec功能并仍然能够写入数据?类似的事情也不起作用:

    $ssh=$this->connect();
    $ssh->exec("mysql mariadb:console myapp newdb");
    $ssh->write("show tables\n");
    $ssh->read('[prompt]');

谢谢。

我想PTY模式是您想要的吗?例如

$ssh->enablePTY(); 
$ssh->exec('mysql mariadb:console myapp newdb'); 
echo $ssh->read('mysql>'); 
$ssh->write("show tables\n");
echo $ssh->read('mysql>');
更多信息:


伟大的尽管我跳过了第一次阅读,最后一次阅读没有任何参数,但这还是按要求工作的。