0

我正在尝试使用 NET_SSH 通过 SSH 连接连接到 mysql 数据库。我正在使用具有读写功能的交互式外壳。

我的代码如下所示:

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 提示符。但我只是明白这一点。难道我做错了什么?

4

1 回答 1

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 服务器。您不只是键入命令并期望它运行。你必须点击进入。

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

于 2012-12-29T06:44:30.513 回答