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

时间:2014-09-20 12:36:51

标签: php shell phpseclib dokku dokku-alt

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

http://dokku-alt.github.io/how-it-works.html

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

    $ssh=$this->connect();
    echo trim($ssh->exec("version");

这相当于

ssh dokku@my.node.org version

并按预期工作。但是,如果我尝试执行一个命令,希望我通过STDIN发送数据,则会出现问题。根据Net_SSH2文档,我需要write将数据导入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]');

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为PTY模式是您正在寻找的?例如

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

更多信息:

http://phpseclib.sourceforge.net/ssh/pty.html