首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用phpseclib和自定义外壳包装器

使用phpseclib和自定义外壳包装器
EN

Stack Overflow用户
提问于 2014-09-20 12:36:50
回答 1查看 271关注 0票数 0

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

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

通过遵循一个典型的示例,我设法将命令发送到我帐户上的自定义shell:

代码语言:javascript
复制
    $ssh=$this->connect();
    echo trim($ssh->exec("version");

这相当于

代码语言:javascript
复制
ssh dokku@my.node.org version

并按预期工作。但是,如果我试图执行一个命令,希望我通过STDIN发送数据,就会出现问题。根据Net_SSH2文档,我需要将数据write到SSH流中,而不是使用exec()。不幸的是,我的下一个示例不起作用,因为自定义shell不接收任何参数并使用帮助页进行响应:

代码语言:javascript
复制
    $ssh=$this->connect();
    $ssh->write("mysql mariadb:console myapp newdb\n");
    $ssh->write("show tables\n");
    $ssh->read('[prompt]');

其结果与

代码语言:javascript
复制
ssh dokku@my.node.org

它只是简单地用帮助页进行响应。

我如何将"exec“功能结合起来,并且仍然能够编写数据?像这样的东西也不起作用:

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-21 16:14:31

我觉得你要找的就是PTY模式?例如:

代码语言:javascript
复制
$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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25948835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档