【问题标题】:PHP NET_SSH Read and Write not working as intendedPHP NET_SSH 读写无法按预期工作
【发布时间】:2012-12-30 04:49:40
【问题描述】:

我正在尝试使用 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 提示符。但我只是明白这一点。我做错了吗?

【问题讨论】:

    标签: php ssh phpseclib


    【解决方案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,您所在的整行也会被删除。

    【讨论】:

    • 与提示相同的结果
    • 我更新了我的帖子。长话短说...将 \n 添加到所有 write() 调用的末尾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多