2014-09-20 52 views
0

我使用PHPSeclib与dokku-ALT安装访问服务器:使用phpseclib使用自定义外壳包装

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

通过下面的一个典型的例子,我设法将命令发送到定制的外壳上我的帐户:

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

这相当于

ssh [email protected] version 

并按预期工作。但是,如果我尝试执行期望我通过STDIN发送数据的命令,则会出现问题。根据Net_SSH2文档,我需要将write的数据转换为SSH流而不是使用exec()。不幸的是我的下一个例子是不行的,因为定制的外壳不接受任何参数,并响应与帮助页面:

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

这样做的结果是相同的

ssh [email protected] 

简单的以帮助页面响应。

如何组合“exec”功能并仍然能够写入数据?像这样的东西也行不通:

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

谢谢。

回答

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

+1

太棒了!尽管我跳过了第一次read(),最后一次read()没有参数,但是按照要求工作。 – romaninsh 2014-09-22 13:36:55