PHP NET_SSH读写不能按预期工作

时间:2012-12-28 17:30:02

标签: php ssh phpseclib

我正在尝试使用NET_SSH通过SSH连接连接到mysql数据库。我正在使用带有读写的交互式shell。

我的代码如下所示:

echo '<pre>';
        $ssh -> setTimeout(10);
        echo $ssh -> read('');

        $ssh -> write('ls');
        echo $ssh -> read('');
        echo '<br />';

        $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;';
        $ssh -> write($string);
        echo $ssh -> read('mysql>');
        echo '<br />';

        $this -> write('show databases;');

        echo $ssh -> read('');
        echo '<br />';

但我的输出看起来像这样:

    lsubuntu@ip-xxxxxx:~$ ls
    Last login: Fri Dec 28 16:08:39 2012 from ool3.dyn.optonline.net

    mysql -u db_user -h xxx.us-east-1.rds.amazonaws.com --password=abc123 my_database; show databases;ubuntu@ip-xxxxxx:~$ mysql -u db_user -h xxx.rds.amazonaws.com --password=abc123 my_database; show databases;
    Last login: Fri Dec 28 16:08:49 2012 from ool3.dyn.optonline.net

show databases;ubuntu@ip-10-151-4-222:~$ show databases;

我的问题是,为什么不像我想的那样互动?我应该说预期的结果是一个mysql连接或至少是一个mysql提示符。但我得到了。我做错了吗?

1 个答案:

答案 0 :(得分:1)

老实说,我会完全改写它。例如

echo '<pre>';
        echo $ssh -> read('[prompt]');

        $ssh -> write("ls\n");
        echo $ssh -> read('[prompt]');
        echo '<br />';

        $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;';
        $ssh -> write("$string\n");
        echo $ssh -> read('mysql>');
        echo '<br />';

        $this -> write("show databases;\n");

        echo $ssh -> read('mysql>');
        echo '<br />';

只有我曾经使用过read('')才能弄清楚提示是什么。

另外,请注意我是如何用\ n结束每个写请求的。 Linux不是一些AJAXified服务器。您不只是键入命令并期望它运行。你必须按回车。

我的意思是,有时候你可以按键,他们只是在没有被按下的情况下做事情。就像在vi中的某些情况一样。您处于正常模式(与插入模式相反),并且您在某个打开的文本文件上点击dd,即使您没有按Enter键,您所在的整行也会被删除。