将phpseclib与自定义shell包装器一起使用
我正在使用PHPSeclib访问安装了dokku alt的服务器: 通过以下典型示例,我成功地将命令发送到我帐户上的自定义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流,而
$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>');
更多信息:
伟大的尽管我跳过了第一次阅读,最后一次阅读没有任何参数,但这还是按要求工作的。